# Ironclad > This reference documents each type of Action available to be sent. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/actions.md # Actions This reference documents each type of Action available to be sent. # Event Callback Function ## event\_callback All `send` commands support an optional callback function that will be executed once the command is complete, successful or not. The function can either be provided to an individual command as an argument, or it can be set as a Site's `event_callback` parameter, which will be used by every `send` command executed by the Site. ```javascript function(err, event_type, context, [payload]) { ... } ``` ### Callback Arguments | NAME | TYPE | DESCRIPTION | | ------------ | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `err` | String | This argument will be null if the command was completed successfully. If the command encountered an error, this argument will contain a message describing the error. | | `event_type` | String | The type of action that was sent. Supported values include: `'agreed'`, `'disagreed'`, `'displayed'`, `'visited'` and `'updated'`. | | `context` | Site, BrowsewrapGroup or ClickwrapGroup | The Site or Group object that initiated the `send` command. | | `payload` | String | This argument is only present when the Site's `disable_sending` property is set to `true`. It contains the URL-encoded payload that would have been sent to the Action API. | # Event Types ## agreed Indicates that a signer has accepted a specific version of a contract. **Note**: The `signer_id` must be set for this type. ```javascript send('agreed', contracts, versions, [group], [event_callback]); ``` ### Arguments | NAME | REQUIRED | TYPE | DESCRIPTION | | ---------------- | -------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | `contracts` | True | Array`` | The `id` of each contract included in the action. | | `versions` | True | Array`` | The `id` of each version included in the action. Ordering matters, as each `id` will be paired with its corresponding position in the `contracts` array. | | `group` | False | Number | The numeric `id` of the group containing the contracts. | | `event_callback` | False | Function | A callback function to execute once the command is complete. | ## disagreed Indicates that a signer has disagreed to a previously accepted version of a contract. **Note**: The `signer_id` must be set for this type. ```javascript send('disagreed', contracts, versions, [group], [event_callback]); ``` ### Arguments | NAME | REQUIRED | TYPE | DESCRIPTION | | ---------------- | -------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | `contracts` | True | Array`` | The `id` of each contract included in the action. | | `versions` | True | Array`` | The `id` of each version included in the action. Ordering matters, as each `id` will be paired with its corresponding position in the `contracts` array. | | `group` | False | Number | The numeric `id` of the group containing the contracts. | | `event_callback` | False | Function | A callback function to execute once the command is complete. | ## displayed Indicates that a specific version of a contract was displayed on the page. **Note**: The `signer_id` is not required for this type. ```javascript send('displayed', contracts, versions, [group], [event_callback]); ``` ### Arguments | NAME | REQUIRED | TYPE | DESCRIPTION | | ---------------- | -------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | `contracts` | True | Array`` | The `id` of each contract included in the action. | | `versions` | True | Array`` | The `id` of each version included in the action. Ordering matters, as each `id` will be paired with its corresponding position in the `contracts` array. | | `group` | False | Number | The numeric `id` of the group containing the contracts. | | `event_callback` | False | Function | A callback function to execute once the command is complete. | ## visited Indicates that a group's legal center was visited. **Note**: The `signer_id` is **not** required for this type. ```javascript send('visited', [contracts], [versions], group, [event_callback]); ``` ### Arguments | NAME | REQUIRED | TYPE | DESCRIPTION | | ---------------- | -------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | `contracts` | False | Array`` | The `id` of each contract included in the action. | | `versions` | False | Array`` | The `id` of each version included in the action. Ordering matters, as each `id` will be paired with its corresponding position in the `contracts` array. | | `group` | True | Number | The numeric `id` of the group containing the contracts. | | `event_callback` | False | Function | A callback function to execute once the command is complete. | ## updated Saves additional name and value pairs to the signer's record. **Note**: The `signer_id` and `custom_data` must be set for this type. ```javascript send('updated', parameters); ``` ### Arguments | NAME | REQUIRED | TYPE | DESCRIPTION | | ------------ | ----------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `parameters` | Conditional | Object | An object containing name and value pairs to send with the action. If the `custom_data` parameter hasn't already been set at the Site level, it should be passed as a property of the `parameters` argument. | --- # Source: https://clickwrap-developer.ironcladapp.com/docs/activity-api.md # Activity API The Activity API exposes a super-fast, highly available API. The purpose of this API is to manage 3 things: * Determine in super real-time whether your user has agreed to the latest version of a contract * Retrieving the versions and revisions of a Contract your Signers have agreed to * Sending activity ("Signed", "Visited", etc.) in real-time within a web or mobile app All Ironclad Clickwrap Activity can be passed as an `HTTP GET` call to the endpoints and the parameters passed as URL parameters. *The API URL for the Ironclad Clickwrap Activity API is[https://pactsafe.io](https://pactsafe.io)* --- # Source: https://clickwrap-developer.ironcladapp.com/reference/add-a-site-to-your-account-1.md # Add a Site to Your Account # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/accounts/{account_id}/sites": { "post": { "summary": "Add a Site to Your Account", "tags": [ "Sites" ], "description": "", "operationId": "add-a-site-to-your-account", "parameters": [ { "name": "account_id", "in": "path", "description": "The ID of the Ironclad Clickwrap Account.", "schema": { "type": "integer", "format": "integer" }, "required": true } ], "requestBody": { "content": { "application/json": { "schema": { "required": [ "key", "name" ], "allOf": [ { "properties": { "acceptance_language": { "type": "string" }, "access_id": { "example": "f9a33f92-0c74-4803-abb5-bf7159da7a13", "readOnly": true, "type": "string" }, "account": { "example": 1, "readOnly": true, "type": "integer" }, "adoption_level": { "readOnly": true, "enum": [ "laggard", "majority", "early_adopter", "innovator", "ironclad_clickwrap", "ironclad_clickwrap_v2", "internal_sandbox", "growth", "professional", "enterprise", "legal_centers" ], "title": "Adoption Level", "type": "string" }, "approval_order": { "example": false, "type": "boolean" }, "base_publish_url": { "readOnly": true, "type": "string" }, "company_information": { "properties": { "city": { "example": "Indianapolis", "type": "string" }, "country": { "example": "United States", "type": "string" }, "name": { "example": "New Website, LLC", "type": "string" }, "postal_code": { "example": 46205, "type": "integer" }, "state": { "example": "IN", "type": "string" }, "street": { "example": "6311 Westfield Blvd.", "type": "string" } }, "type": "object" }, "created_by": { "example": 1, "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "deleted": { "example": false, "readOnly": true, "type": "boolean" }, "deleted_by": { "example": 1, "readOnly": true, "type": "integer" }, "deleted_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "disabled": { "example": false, "readOnly": true, "type": "boolean" }, "email_allow_override": { "example": false, "type": "boolean" }, "email_display_name": { "example": "New Website", "type": "string" }, "email_reply_address": { "example": "team@pactsafe.com", "type": "string" }, "enable_allowed_domains": { "example": false, "type": "boolean" }, "enforce_limits": { "example": true, "readOnly": true, "type": "boolean" }, "first_acceptance_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "id": { "example": 1, "readOnly": true, "type": "integer" }, "key": { "example": "new-website", "type": "string" }, "legal_center_url": { "readOnly": true, "type": "string" }, "locale": { "example": "en-US", "type": "string" }, "mobile_acceptance_language": { "default": "Agree", "example": "Agree", "type": "string" }, "mobile_friendly": { "example": true, "type": "boolean" }, "name": { "example": "New Website", "type": "string" }, "primary": { "example": false, "readOnly": true, "type": "boolean" }, "require_signer_verification": { "example": false, "type": "boolean" }, "sandbox": { "example": false, "readOnly": true, "type": "boolean" }, "time_zone": { "example": "America/New_York", "type": "string" }, "updated_by": { "example": 1, "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "url": { "example": "http://wwww.newwebsite.com", "type": "string" }, "verified": { "example": true, "readOnly": true, "type": "boolean" }, "verified_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" } }, "type": "object" } ] } } } }, "responses": { "201": { "description": "Created Site.", "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "properties": { "acceptance_language": { "type": "string" }, "access_id": { "example": "f9a33f92-0c74-4803-abb5-bf7159da7a13", "readOnly": true, "type": "string" }, "account": { "example": 1, "readOnly": true, "type": "integer" }, "adoption_level": { "readOnly": true, "enum": [ "laggard", "majority", "early_adopter", "innovator", "ironclad_clickwrap", "ironclad_clickwrap_v2", "internal_sandbox", "growth", "professional", "enterprise", "legal_centers" ], "title": "Adoption Level", "type": "string" }, "approval_order": { "example": false, "type": "boolean" }, "base_publish_url": { "readOnly": true, "type": "string" }, "company_information": { "properties": { "city": { "example": "Indianapolis", "type": "string" }, "country": { "example": "United States", "type": "string" }, "name": { "example": "New Website, LLC", "type": "string" }, "postal_code": { "example": 46205, "type": "integer" }, "state": { "example": "IN", "type": "string" }, "street": { "example": "6311 Westfield Blvd.", "type": "string" } }, "type": "object" }, "created_by": { "example": 1, "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "deleted": { "example": false, "readOnly": true, "type": "boolean" }, "deleted_by": { "example": 1, "readOnly": true, "type": "integer" }, "deleted_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "disabled": { "example": false, "readOnly": true, "type": "boolean" }, "email_allow_override": { "example": false, "type": "boolean" }, "email_display_name": { "example": "New Website", "type": "string" }, "email_reply_address": { "example": "team@pactsafe.com", "type": "string" }, "enable_allowed_domains": { "example": false, "type": "boolean" }, "enforce_limits": { "example": true, "readOnly": true, "type": "boolean" }, "first_acceptance_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "id": { "example": 1, "readOnly": true, "type": "integer" }, "key": { "example": "new-website", "type": "string" }, "legal_center_url": { "readOnly": true, "type": "string" }, "locale": { "example": "en-US", "type": "string" }, "mobile_acceptance_language": { "default": "Agree", "example": "Agree", "type": "string" }, "mobile_friendly": { "example": true, "type": "boolean" }, "name": { "example": "New Website", "type": "string" }, "primary": { "example": false, "readOnly": true, "type": "boolean" }, "require_signer_verification": { "example": false, "type": "boolean" }, "sandbox": { "example": false, "readOnly": true, "type": "boolean" }, "time_zone": { "example": "America/New_York", "type": "string" }, "updated_by": { "example": 1, "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "url": { "example": "http://wwww.newwebsite.com", "type": "string" }, "verified": { "example": true, "readOnly": true, "type": "boolean" }, "verified_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" } }, "type": "object" } } } } } }, "400": { "description": "Bad request." }, "409": { "description": "Already exists." } }, "deprecated": false } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/add-a-snapshot-location-to-an-agreed-event.md # Add a Snapshot Location to an Agreed Event ## Overview Snapshots enable legal teams to manage and automatically capture visual evidence for clickwrap agreements at scale. This guide will cover how to add location keys to your Clickwrap implementation to automatically tie visual evidence to tracked acceptances. ## Requirements To get started, you'll need to ensure that you have the following: * Create a Location under Ironclad Snapshot Locations * Location key from a **published** Ironclad Location that contains the URL of the embedded agreement. ## Adding a Snapshot Location Replace 'location-key' with your location key. Then, place the following code after the JS snippet and `_ps('load')`. ```javascript _ps('set', 'snapshot_location', 'location-key'); ``` Afterward, the location will display the date of last acceptance. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/adding-a-signature-to-embedded-contract.md # Adding a Signature to an Embedded Contract How to add a stylized signature or initials block into a document itself ### Overview While a checkbox or click is often enough to constitute a legally binding acceptance in most jurisdictions, there are occasions when a stylized signature or initials block on the document itself is the preferred method of acceptance. Keep reading to find out how to configure your HTML contracts to include this acceptance method. ### Requirements To get started, you'll need to ensure that you have the following: * Ironclad Clickwrap Site Access ID. More info in the [Authentication](https://clickwrap-developer.ironcladapp.com/docs/authentication-2) page. ## Configuring a Contract ### Using the New Experience 1. Login to the app at [clickwrap.pactsafe.com](https://clickwrap.pactsafe.com). 2. On the templates tab, create a new HTML template or edit an existing one. In either case, you should be redirected to [\](https://clickwrap.pactsafe.com/templates/:id/edit) 3. Using the WYSIWYG editor, enter in the following example text: > Hello \{\{name}},\ > Thank you for your business with \{\{company}}. We are very excited to work with you.\ > Please sign below for our records.\ > Signature: \{\{name}} 4. Next from the `...` overflow menu, select the "Toggle Code View" option. 5. Where previously we had the second `{{name}}` block, replace that line with ```html
Signature: {{name}}
``` 6. Set the contract to `public` if it is not already (so that it can be loaded into an Embedded Contract Group) and publish the Template. 7. Note the Template Key from the sidebar, as we will use it in the next step. For demo purposes, ours is named `signature-example`. #### Example Advanced styles: ```html ``` #### Example Template Preview (in Ironclad Clickwrap) App Preview of Dynamic Content.png ### Add Template to a Clickwrap Group 1. Configure a `scroll` style Clickwrap Group ([Create a Clickwrap Group](https://clickwrap-developer.ironcladapp.com/docs/how-to-add-a-terms-of-use-clickwrap-to-a-sign-up-page#step-2-create-a-clickwrap-group)). 2. Add the Template from above (`signature-example`) to this group. 3. Give the Embedded Group a useful Key. For demo purposes, ours is named `signature-group`. 4. For this demo, on the "Embed" tab, set the "HTML Element ID" to `agreements` and click "Publish". ### Testing the signature block 1. For the ease of testing here, go ahead and use this example to setup your page. ```html

Signature Example

``` 2. Save the file as `signature.html`. #### Testing the signature block 1. On your browser, render `signature.html`. 2. You should now see something like the following: --- # Source: https://clickwrap-developer.ironcladapp.com/docs/android-sdk.md # Android SDK # Android SDK Fork it at [https://github.com/pactsafe/pactsafe-android-sdk](https://github.com/pactsafe/pactsafe-android-sdk) * [Requirements](#requirements) * [Notes Before Getting Started](#notes-before-getting-started) * [Installation](#installation) * [Configure and Initalize the PactSafe SDK](#configure-and-initalize-the-pactsafe-sdk) * [Preloading Clickwrap Data](#preloading-clickwrap-data) * [PSClickWrapActivity](#psclickwrapactivity) * [Starting a Clickwrap Activity](#starting-a-click-wrap-activity) * [Configure Contracts Link Behavior](#configure-contracts-link-tap-behavior) * [Check if Checkbox is Selected](#check-if-checkbox-is-selected) * [Sending Acceptance](#sending-acceptance) * [Checking Acceptance](#checking-acceptance) * [Sending Activity Manually](#sending-activity-manually) * [Customizing Acceptance Data](#customizing-acceptance-data) * [Connection Data](#connection-data) * [Custom Data](#custom-data) ## Requirements * Android Min SDK 22 * PactSafe Published Contracts in Public Group * PactSafe Group Key * PactSafe Site Access ID * PactSafe API Access ## Notes Before Getting Started Both the SDK and Demo app are written in Kotlin ### Demo Android App As you follow along in this guide, you may want to look at the PactSafe Android Demo App as an example. ## Installation First, aurthorize your app to use GitHub Packages: [GitHub Packages Authorization](https://help.github.com/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-gradle-for-use-with-github-packages) Add the following dependency to your `build.app` gradle file. ```kotlin implementation("com.pactsafe:androidsdk:{Version}") ``` ## Configure and Initalize the PactSafe SDK It is recommended that you initialize the sdk in `onCreate` in your `MainApplication` class. Your call might look something like this: ```kotlin PSApp.init( "Site Access ID", "Group Key", this, debug = true, testData = true ) ``` ### Preloading Clickwrap Data Since your `PSClickWrapActivity` class will load contracts for the specified PactSafe group, you may want to preload the data using your group key before displaying the clickwrap. By preloading, a user will be less likely see loading when they get to the screen that contains the `PSClickWrapActivity`. To preload your PactSafe group data, you can use the `preload` method on the PSApp object within your `MainApplication`. Example below: ```kotlin PSApp.preload() ``` This will fetch group data and cache it for later use. Note: The `debug` and `testData` flags are defaulted to `false`. ### Debug Mode Setting the `debug` flag to true will display additional information in your console. ### Test Mode Optionally, set `testMode` to true as you are testing your implementation. This allows you to delete test data in your PactSafe site. Note: Don't forget to turn `testMode` off before you are finished! ### Data Types Before you start to implement, you may want to become familiar with a few data types used by the Android SDK. | Name | Description | | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | PSSignerID | `PSSignerID` is a typealias for a String. | | PSSigner | `PSSigner` is an object that you'll use to send over your signer information. You must include a `signerId`, which is a `PSSignerID` or String that holds your unique signer ID that PactSafe holds. You can optionally pass over additional custom data with a `PSCustomData` object, which is covered below. | | PSCustomData | `PSCustomData` holds additional information about your signer and can be customized. Please see the properties that are available to be set in the [Customizing Acceptance Data](#customizing-acceptance-data) section. | | PSGroup | `PSGroup` is an object that holds information about a speciifc group (uses PactSafe group key) that is loaded from the PactSafe API. | | PSContract | `PSContract` is an object that holds information about contracts within a PactSafe `PSGroup`. | | PSConnectionData | The `PSConnectionData` object [Customizing Acceptance Data](#customizing-acceptance-data) section. | ## PSClickWrapActivity The easiest way of getting started with using the PactSafe clickwrap is by utilizing `PSClickWrapActivity` class to dynamically load your contracts into a Layout. The `PSClickWrapActivity` class extends AppCompatActivity, which allows you to easily customize and format the clickwrap as needed. ```kotlin class YourActivity: PSClickWrapActivity() {} ``` ### Starting a Clickwrap activity There are three types of clickwraps available from the SDK: 1. Checkbox Acceptance 2. Alert Modal Acceptance 3. Checkbox Within Existing View `PSClickWrapActivity` provides and easy way to create either of the first two.\ `PSClickWrapActivity.create()` accepts, along with `Context` and `Class`, `ClickWrapType`. Choose from `CHECKBOX` or `ALERT`. You may start an activity like so: ```kotlin startActivity( PSClickWrapActivity.create( this, YourClickwrapActivity::class.java, PSClickWrapActivity.ClickWrapType.CHECKBOX ) ) ``` ### Interacting with Your Clickwrap `PSClickWrapActivity` requires implementation of the following methods: ```kotlin override fun onPreLoaded(psGroup: PSGroup) {} override fun onContractLinkClicked(title: String, url: String) {} override fun onAcceptanceComplete(checked: Boolean) {} override fun onSendAgreedComplete(downloadUrl: String) {} override fun onSignedStatusFetched(status: Map) {} ``` #### Configure Contracts Link Tap Behavior In the third case, you may be uilding an acceptance view for your users to create a user, for instance, you can utilalize `PSCheckBoxView` in your layout as so: ```xml ``` If you wish the contract links to use your OS's native browser when tapped, just set the `useOSBrowser` attribute to `true`. It defaults to false. When using the `CHECKBOX` Clickwrap, you can set this preference directly on the Activity by calling the `setUsesOSBrowser(Boolean)` function. If you use the default link tap setting, you will be handed a url in the `onContractLinkClicked` function. Your implementation may look someting like: ```kotlin override fun onContractLinkClicked(title: String, url: String) { loadWebView(title, url) } ``` #### Check if Checkbox is Selected When your users tick the checkbox, you will be alerted via the `onAcceptanceComplete` function. Here you might enable a submit button or something similar so that you can send acceptance assured that the box has been ticked. ```kotlin override fun onAcceptanceComplete(checked: Boolean) { btn_login.isEnabled = checked } ``` #### Sending Acceptance If you're using the `PSCheckBoxView` directly in your PS create a `PSSigner` object and include any custom data you wish. When you're ready, invoke the `sendAgreed` method available on the Activity. It will require a `PSSigner` object and an `EventType` ```kotlin btn_signup.setOnClickListener { it.isEnabled = false val signer = PSSigner( edit_email.text.toString(), PSCustomData(edit_first_name.text.toString(), edit_last_name.text.toString()) ) sendAgreed(signer, EventType.AGREED) } ``` Once the acceptance has been submitted successfully, you will be notified via `onSendAgreedComplete`. ```kotlin override fun onSendAgreedComplete(downloadUrl: String) { navigateToHome() } ``` ## Checking Acceptance ##### Receive Notice of Acceptance In order to determine if a user has accepted all of the latest contract language, you may invoke the `fetchSignedStatus` method on the Activity. This will return a `Map` called `status` for any contracts that need accepted. You'll need to see if there any in the list that require attention. If so, you must create a `PSSigner` object using the `username` and pass it to `showTermsIntercept` on the Activity. An easy way to do so is: ```kotlin override fun onSignedStatusFetched(status: Map) { val updateSignedStatus = status.values.any { !it } val signer = PSSigner(edit_username.text.toString()) if (updateSignedStatus) { showTermsIntercept(ALERT_TYPE, status, signer) } else { navigateToHome() } } ``` Note: `ALERT_TYPE` is set `onCreate` for the parent activity and may be accessed here. Depending on the type of activity you've created, it will indicate to PSClickWrapActivity how to behave. ## Sending Activity Manually In the occurence that you would need to send an Activity Manually, you may simply invoke `PSApp.sendActivity` directly. This call will return a `Single` observable. If you don't already, in this case, you will need to implement RXJava/RxAndroid ## Customizing Acceptance Data ### Connection Data Below, you'll find information on what to expect the SDK to send over as part of the activity event as "Connection Data", which is viewable within a PactSafe activity record. Many of the properties are set upon initialization except the optional properties (marked as optional below) using the following Apple APIs: `UIDevice`, `Locale`, and `TimeZone`. If you need further information about these properties, please reach out to us directly. | Property | Description | Overridable | | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | | `clientLibrary` | The client library name being used that is sent as part of the activity. | No | | `clientVersion` | The client library version being used that is sent as part of the activity. | No | | `deviceFingerprint` | The unique identifier that is unique and usable to this device. | No | | `environment` | The mobile device category being used (e.g,. tablet or mobile). | No | | `operatingSystem` | The operating system and version of the device. | No | | `screenResolution` | The screen resolution of the device. | No | | `browserLocale` | The current locale identifier of the device. | Yes | | `browserTimezone` | The current time zone identifier of the device. | Yes | | `pageDomain` (Optional) | The domain of the page being viewed. *Note: This is normally for web pages but is available to be populated if needed.* | Yes | | `pagePath` (Optional) | The path of the page being viewed. *Note: This is normally for web pages but is available to be populated if needed.* | Yes | | `pageQuery` (Optional) | The query path on the page being viewed. *Note: This is normally for web pages but is available to be populated if needed.* | Yes | | `pageTitle` (Optional) | The title of the page being viewed. *Note: This is normally for web pages but is available to be populated if you'd like to use the title of the screen where the PactSafe activity is occurring.* | Yes | | `pageUrl` (Optional) | The URL of the page being viewed. Note: This is normally for web pages but is available to be populated if needed. | Yes | | `referrer` (Optional) | The referred of the page being viewed. *Note: This is normally for web pages but is avaialble to be populated if needed.* | Yes | ### Custom Data Custom Data will typically house additional information that you'd like to pass over that will be appended to the activty event. By adding Custom Data to the event, you'll be able to search and filter based on specific custom data within the PactSafe app, which can be beneficial when you have many activity events. Before sending an activity event, you may want to customize properties on `PSCustomData` that can be set. Be sure to note that properties such as `firstName`, `lastName`, `companyName`, and `title` that are properties on `PSCustomData` are reserved for PactSafe usage only (like seeing the name of an individual within the PactSafe app). | Property | Description | Overridable | | ------------------- | ------------------------------------------------------------------------------- | ----------- | | `androidDeviceName` | The name of the user's Android device (e.g., John Doe's Pixel XL). | No | | `firstName` | First Name is a reserved property for custom data in PactSafe but can be set. | Yes | | `lastName` | Last Name is a reserved property for custom data in PactSafe but can be set. | Yes | | `companyName` | Company Name is a reserved property for custom data in PactSafe but can be set. | Yes | | `title` | Title is a reserved property for custom data in PactSafe but can be set. | Yes | --- # Source: https://clickwrap-developer.ironcladapp.com/docs/angular-sdk.md # Angular SDK # PactSafe Angular SDK Angular SDK for easy Clickwrap/Browsewrap implementation leveraging PactSafe's JavaScript Library ## Features * Automatically loads the PactSafe Snippet into your app so all you have to do is call `_ps` to use the PactSafe Library #### PSClickWrap Component: * Renders a PactSafe ClickWrap group by providing a site `accessId` and a `groupKey` * Have more control on what contracts you show by using a `filter` to specify contract ID's and/or tags * Render a completely dynamic Clickwrap by passing in `render_data` * Override default properties set within PactSafe's App configuration: * ClickWrap Style using `clickWrapStyle` (only when using `filter` as well) * Signer ID selector using `signerIdSelector` * and more! (See more detailed documentation on available PSClickWrap configurations below) #### PSBrowseWrap Component: * Renders a PactSafe BrowseWrap grou by providing a site `accessId` and `groupKey` * Override default properties set within PactSafe's App configuration: * Position with `position` * Visability with `alwaysVisible` * and more! (See more detailed documentation on available PSBrowseWrap configurations below) ## Demo & Example #### PSClickWrap Component: ![PSClickWrap](https://github.com/pactsafe/pactsafe-angular-sdk/raw/master/img/PSClickWrap.gif "PSClickWrap") #### PSBrowseWrap Component: ![PSBrowseWrap](https://github.com/pactsafe/pactsafe-angular-sdk/raw/master/img/PSBrowseWrap.gif "PSBrowseWrap") #### Example Included in the project is an example folder. To run the example, navigate to the root of the example folder, then: ``` npm install http-server -g http-server ``` Open a browser and go to localhost:8081 and the example app should be running and you can see the components in action. If the app is having permission issues when trying to run, try running the server as an https server as follows: ``` // Create self-signed SSL openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem // Run SSL Server http-server -S -C cert.pem -o ``` ## Installation The easiest way to use pactsafe-angular-sdk is to install it using NPM and include it in your own Angular 2+ build process.\ The module provides you with the transpiled code and an example project using the sdk. ```bash npm install pactsafe-angular-sdk --save ``` Alternatively, for more flexability, you can clone the repository, allowing you to modify the source code easier, and then use gulp (already preconfigured) to build your src. * Clone * Modify src how you want * `gulp build` * Use dist in your project as you would with the npm module ## Usage #### Using PSClickWrap In order to use the PSClickWrap component, you must import PSModule from `pactsafe-angular-sdk` into your main module PSClickWrap Component: ```typescript // app.module.ts import { PSModule } from 'pactsafe-angular-sdk' // ... @NgModule({ // ... imports: [ PSModule.forRoot(), // Other imports ], // ... }) ``` With the PSModule properly imported, you should be able to use the PSClickWrap component throughout your project.\ The ClickWrap requires you to specify an `accessId`, one of ( `groupKey` or `filter` ), and one of (`signerIdSelector`, `signerId`). The `signerIdSelector` corresponds to an input element whose input will identify the signer (usually an email field), so when the user accepts your terms, the info can be successfully sent to PactSafe. The `signerId` just takes a string and assigns that string as the user's id instead of using the input field, allowing you to programmatically assign this information if need be. ```html ``` Replace `YOUR_PACTSAFE_ACCESS_ID_HERE` with your PactSafe Site Access ID found here Replace `YOUR_GROUP_KEY_HERE` with your group's key found within your PacSafe group's configuration Pass in any additional options using inputs on the `ps-click-wrap` component as shown above with `accessId`, `groupKey`, and `signerIdSelector` #### Using PSBrowseWrap In order to use the PSBrowseWrap component, you must import PSModule from `pactsafe-angular-sdk` into your main module exactly as shown above for the PSClickWrap With the PSModule properly imported, you should be able to use the PSBrowseWrap component throughout your project.\ The BrowseWrap requires you to specify an `accessId`, `groupKey`, and a `linkText`. ```html ``` Replace `YOUR_PACTSAFE_ACCESS_ID_HERE` with your PactSafe Site Access ID found here Replace `YOUR_GROUP_KEY_HERE` with your group's key found within your PacSafe group's configuration Replace `YOUR_LINK_TEXT_HERE` with the text you want displyed for your link generated by the BrowseWrap Pass in any additional options using inputs on the `ps-browse-wrap` component as shown above with `accessId`, `groupKey`, and `linkText` #### Inputs/Configurations for ClickWrap and BrowseWrap Components ##### PSClickWrap Inputs: | Input | Type | Default | Required? | Description | | :------------------: | :-------------------------------------------------------------------------------------: | :------------------------------------: | :-----------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | `accessId` | string | null | Yes | PactSafe site access ID | | `clickWrapStyle` | string.oneOf\[\`'full'\`, \`'scroll'\`, \`'checkbox'\`, \`'combined'\`, \`'embedded'\`] | Value specified in PactSafe Group's UI | No | Override the clickwrap style specified in the PactSafe Group Interface (only works if using `filter` instead of `groupKey`) | | `confirmationEmail` | bool | Value specified in PactSafe Group's UI | No | Override whether to send a confirmation email to the signer upon contract acceptance | | `containerName` | string | ps-clickwrap | No, but encouraged if using more than one contract in a group | The div ID that will contain your clickwrap. You should override this if you plan on displaying more than one contract on a page. | | `disableSending` | bool | false | No | Turn this on if you want to manually send the agreed event instead of it automatically being sent on contract acceptance. [See documentation on manually sending the agreed event here.](https://clickwrap-developer.ironcladapp.com/docs/manually-sending-acceptance) | | `displayAll` | bool | true | No | Display all contracts in the group immediately. If disabled, a contract will only be displayed if the signer hasn't accepted the latest version. | | `displayImmediately` | bool | true | No | Display the group's contracts as soon as the Signer ID is available. If disabled, contracts will remain hidden until you call `displayRequired()` | | `dynamic` | bool | false | No | If you would like to use dynamic render\_data in your contract, you must set this to true. If this is set to true, you MUST also pass an object into the `render_data` prop. | | `filter` | string | null | If `groupKey` prop is not passed | Allows you to dynamically load contracts without having to specify a group. Filter must be in the format: `id==123,456` OR `id==12345 and tags==tag1,tag2` OR `tags==tag1,tag2`. [See documentation for more information on using dynamic groups.](https://clickwrap-developer.ironcladapp.com/docs/dynamic-groups-and-how-to-use-them) | | `forceScroll` | bool | Value specified in PactSafe Group's UI | No | Disable acceptance until the signer scrolls to the bottom of each contract. | | `groupKey` | string | null | If `filter` prop is not passed | PactSafe group key, this is found within the PactSafe Groups configuration. | | `renderData` | object | null | If `dynamic` is set to true | Object containing the dynamic render data for your contract. [For more information on using dynamic contracts, check out this documentation.](https://clickwrap-developer.ironcladapp.com/docs/how-to-use-dynamic-contracts-with-the-javascript-library#published-contract-with-tokens) | | `signerId` | string | null | If `signerIdSelector` prop is not passed | The ID that will be used to identify the signer (this option lets you programmatically assign the Id instead of using an input field with `signerIdSelector`. | | `signerIdSelector` | string | null | If `signerId` prop is not passed | The ID of the `` element that will be used to identify the signer. | | `testMode` | bool | false | No | Enable this to register any contract acceptances as test data that can be cleared within the PactSafe UI | ##### PSBrowseWrap Inputs: | Input | Type | Default | Required? | Description | | :---------------: | :--------------------------------------------------------------: | :-----------------: | :----------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | `accessId` | string | null | Yes | PactSafe site access ID | | `alwaysVisible` | bool | false | No | Keep the badge visible on the page at all times. If disabled, the badge will be hidden if the target link is visible on screen. | | `badgeText` | string | value of `linkText` | No | Provide alternate text for the BrowseWrap badge | | `groupKey` | string | null | Yes | PactSafe group key, this is found within the PactSafe Groups configuration. | | `link` | string | null | If `openLegalCenter` is set to false | Location of where the BrowseWrap link should redirect to, should only be used if `openLegalCenter` is set to false, otherwise the link will open the group's PactSafe legal center | | `linkText` | string | null | Yes | The text that your BrowseWrap link will display (for example, 'Legal Center' or 'Terms of Service') | | `openLegalCenter` | bool | true | No | Open this group's legal center page when the badge or link is clicked. If enabled, the target link's original `href` will be replaced. | | `position` | string.oneOf\[\`'middle'\`, \`'left'\`, \`'right'\`, \`'auto'\`] | auto | No | Position of where the BrowseWrap badge will float within the browser window | ## Notes * **You must run your web app over HTTPS** in order to interact with the PactSafe Activity API (that powers both the PSClickWrap and PSBrowseWrap components)! * If you are developing in an AngularCli generated project, you may run into trouble using the library. Make sure you set up a path mapping in /src/tsconfig.app.json of your consuming application (not the library) and that should solve any compilation problems you may have: ```js { "compilerOptions": { // ... // Note: these paths are relative to 'baseUrl' path. "paths": { "@angular/*": [ "../node_modules/@angular/*" ] } } } ``` * Both the components load in the ps library giving you access to the `_ps` global. With that, you can add more advance functionality (checking whether all contracts have been accepted, sending data only on form submit, etc.) * `_ps` is defined as a global in the window, so you can access it from any of your angular components * If you are having trouble with the linter using `_ps`, include `declare var _ps: any;` at the top of the file you are trying to use it in. This just tells the linter that `_ps` exists. ## License Copyright (c) 2017 PactSafe. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/authentication-2.md # Authentication (Activity API) Learn about how authentication works with the Activity API. Our Activity API does not utilize your REST API Access Token. Instead, it utilizes your Site **Access ID**, which is located within your [Site Settings](https://app.pactsafe.com/settings/account). Your Site Access ID should be added as a URL parameter on every API call to the Activity API. The site access ID is unique to your Ironclad Clickwrap site and is meant only to help identify your implementation with Ironclad Clickwrap. This means that it can safely be used in client-side implementations and mobile applications. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/browsewrapgroup-object.md # BrowsewrapGroup Object This reference documents the properties and methods available on the BrowsewrapGroup object. # Properties ## BrowsewrapGroup.parameters `ParameterStore` A DataObject used by a BrowsewrapGroup to store its properties and `parameters`. During initialization, the parameters object is populated with all of the Group's configuration and display options, as well as the latest id of each contract and version that are a part of the Group. ## BrowsewrapGroup.rendered `Boolean` A boolean flag indicating if the render() method has been executed successfully, injecting the Group's HTML content into the page. ## BrowsewrapGroup.eventsAttached `Boolean` A boolean flag indicating if the `setupEvents()` method has been executed successfully, attaching all of the event listeners used to update the badge's position. If the `removeEvents()` method is executed, this property will be set back to false. # Methods ## get Returns the value of a parameter or property stored on the Group. ```javascript group.get(parameter); ``` ### Arguments |NAME|REQUIRED|TYPE|DESCRIPTION| |---|---|---|------------------| |`parameter`|True|String|The name of the parameter to return.| ### Returns ||| |----|----| |`String, Number, Boolean, Object, etc.`|The value of the parameter or property, or undefined if the parameter isn't set.| ### Examples ```javascript // Returns the "key" property. var val = group.get('key'); // 'legal-badge' ``` ```javascript // Returns the "contracts" parameter, which contains // the id of each contract included in this Group. var contracts = group.get('contracts'); // [ 10, 14 ] ``` ## set Sets the value of one or more parameters on the Group. Accepts either a single parameter name and value, or an object of multiple parameter name and value pairs to set. **Note**: This method only applies to parameters. All properties must be set when the BrowsewrapGroup object is created. ```javascript group.set(parameter, value); ``` ```javascript group.set(parameters); ``` ### Arguments |\_|NAME|REQUIRED|TYPE|DESCRIPTION| |---|---|---|---|------------------| |Option 1|`parameter`|True|String|The name of the parameter to set.| ||`value`|True|String, Number, Object, Function, etc.|The value of the parameter to set.| |Option 2|`parameters`|True|Object|An object containing one or more parameter name and value pairs to set.| ### Returns No Return Value ### Examples ```javascript // Sets the "position" parameter. group.set('position', 'right'); ``` ```javascript // Sets the "position" to "center", and // makes the badge visible at all times. group.set({ position: "center", always_visible: true }); ``` ## send Invokes a `send` command on the Site, with the `contracts`, `versions` and `group` parameters automatically populated with the Group's values. ```javascript group.send(event_type, [parameters]); ``` ### Arguments |NAME|REQUIRED|TYPE|DESCRIPTION| |---|---|---|------------------| |`event_type`|True|String|The type of the action being sent. Supported values include: `'agreed'`, `'disagreed'`, `'displayed'`, `'visited'` and `'updated'`.| |`parameters`|Conditional|Object|A single object containing parameter name and value pairs to use for this send only. The `contracts`, `versions` and `group` parameters are included by default.| ### Returns No Return Value ### Examples ```javascript // Sends a "visited" action for the Group. group.send('visited'); // Automatically adds the Group's parameters to the command: // { // contracts: [ 10, 14 ], // versions: [ '5589bf606e7b9c1b1deef447', '5589bf606e7b9c1b1deef450' ], // group: 32 // } ``` ## render Injects the badge HTML into the page and runs `setupEvents()`. ```javascript group.render([force]); ``` ### Arguments |NAME|REQUIRED|TYPE|DESCRIPTION| |---|---|---|------------------| |`force`|False|Boolean|If true, the Group will be forced to re-render.| ### Returns No Return Value ### Examples ```javascript // Renders the browsewrap badge on the page. group.render(); ``` ## openLegalCenter Opens the Group's Legal Center page in a new tab. The URL is stored in the `legal_center_url` parameter. ```javascript group.openLegalCenter(); ``` ### Arguments No Arguments ### Returns No Return Value ### Examples ```javascript // Opens the Group's Legal Center page. group.openLegalCenter(); ``` ## setupEvents Attaches the `badge_updater` function to multiple events on the window object, including `'load'`, `'scroll'` and `'resize'`. This function is responsible for updating the badge's position on the page. **Note**: This method will only run if the Group's `eventsAttached` property is `false`. ```javascript group.setupEvents(); ``` ### Arguments No Arguments ### Returns No Return Value ### Examples ```javascript // Attaches badge_updater function to 'load', 'scroll' and 'resize' events. group.setupEvents(); ``` ## removeEvents Clears all of the event listeners that were attached by `setupEvents()`. **Note**: This method will only run if the Group's `eventsAttached` property is `true`. ```javascript group.removeEvents(); ``` ### Arguments No Arguments ### Returns No Return Value ### Examples ```javascript // Clears the 'load', 'scroll' and 'resize' // listeners from the window object. group.removeEvents(); ``` ## forceUpdate Forces the badge to update its position using the `badge_updater` function. This method can be used as an alternative to the event listeners. ```javascript group.forceUpdate(); ``` ### Arguments No Arguments ### Returns No Return Value ### Examples ```javascript // Forces the badge to update its position. group.forceUpdate(); ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/check-if-signer-has-accepted-latest-contracts.md # Check if Signer Has Accepted Latest Contracts ## Overview Occasionally, you may want to know if a Signer has accepted the latest set of Contract Versions within a Group, which is especially helpful when you need to ask them to accept the latest Versions. You'll typically use this route when using Groups as part of your acceptance workflow but this can also be used to check on a specific Contract. To get started, you'll be using the [Retrieve Latest Versions](https://developer.pactsafe.com/reference/get-the-latest-versions-signed) route. ## Example Code > 🚧 Example Only Code > > Please note that the example code is only for demonstration purposes and may not work in all environments. ```javascript /** * For example purposes only. * Uses the Fetch API, which is not compatible with all browsers. * Learn more here: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API */ // Uses GET on /latest fetch('https://pactsafe.io/latest?sid=SITE_ACCESS_ID&sig=ENCODED_SIGNER_ID&gkey=A_GROUP_KEY') .then(response => response.json()) .then(data => { console.log(data); /* The data returned will be a JSON object with keys being the contract ID and values being the accepted status. Example: { "282": true, "1241": false } */ }) .catch(err => console.log(err)); ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/clickwrap-for-salesforce.md # Salesforce Integration It may be needed for you to write Ironclad Clickwrap data back to Salesforce once an agreement has been accepted. To integrate Clickwrap agreements back into Salesforce, see the options below on using Ironclad Webhooks to send data to Opportunities, Accounts, Contacts, and more. ## Send Ironclad Clickwrap Data to Salesforce There are a couple of ways that can accomplish this. 1. Using Ironclad Clickwrap Webhooks in combination with a middleware service like Zapier. 2. Using Salesforce Apex code to retrieve data from the Ironclad Clickwrap Webhook. ### Webhooks with Zapier Depending on the type of event you want to trigger the process (we normally see Agreed events), you'll need to make sure that you set this up in your Ironclad Clickwrap Site [integrations page](https://app.pactsafe.com/settings/integrations). Webhooks give you the ability to be notified when an acceptance has occurred and handle it as needed. For example, using a platform like Zapier allows you to hook into Ironclad Clickwrap webhooks and update data within your Salesforce account. Webhooks are typically the easiest way to get data back to Salesforce when you may not have immediate Salesforce development resources. If you do have Salesforce help, the next section covers more advanced methods. For more information on writing back data to Salesforce using Zapier, visit our [Integrating Ironclad Clickwrap with Zapier](https://clickwrap-developer.ironcladapp.com/docs/salesforce-integration-via-zapier) guide. ### Salesforce Apex Salesforce Apex allows teams to build custom flow and transaction control statements on Salesforce. Teams can create complex business processes without middleware. An Apex Class will be used to set up as a webhook event listener. The Apex Class will also be used to parse the body from the webhook and added to the Salesforce Object. For more information on writing back data to Salesforce with Apex, visit our [Integrating Ironclad Clickwrap with Apex](https://clickwrap-developer.ironcladapp.com/docs/salesforce-integration-via-salesforce-apex) guide. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/clickwrapgroup-object.md # ClickwrapGroup Object This reference documents the properties and methods available on the ClickwrapGroup object. # Properties ## ClickwrapGroup.parameters `ParameterStore` A DataObject used by a ClickwrapGroup to store its properties and parameters. During initialization, the `parameters` object is populated with all of the Group's configuration and display options, as well as the latest id of each contract and version that are a part of the Group. ## ClickwrapGroup.agreed `ParameterStore` A DataObject that stores which contracts in the Group have been accepted by the signer, either previously or during this session. ## ClickwrapGroup.checked `ParameterStore` A DataObject that stores which contracts in the Group have had their checkbox manually checked by the signer. ## ClickwrapGroup.rendered `Boolean` A boolean flag indicating if the `render()` method has been executed successfully, injecting the Group's HTML content into the page. ## ClickwrapGroup.inputInjected `Boolean` A boolean flag indicating if the `` element has been injected into the form. The value of this input element specifies whether all contracts in the Group have been accepted. ## ClickwrapGroup.signerIdListening `Boolean` A boolean flag indicating if the Group is listening for `'blur'` and `'change'` events on an input element, which contains the value for the `signer_id` parameter. # Methods ## get Returns the value of a parameter or property stored on the Group. ```javascript group.get(parameter); ``` ### Arguments | NAME | REQUIRED | TYPE | DESCRIPTION | | ----------- | -------- | ------ | ------------------------------------ | | `parameter` | True | String | The name of the parameter to return. | ### Returns | | | | --------------------------------------- | -------------------------------------------------------------------------------- | | `String, Number, Boolean, Object, etc.` | The value of the parameter or property, or undefined if the parameter isn't set. | ### Examples ```javascript // Returns the "key" property. var val = group.get('key'); // 'login-contracts' ``` ```javascript // Returns the "contracts" parameter, which contains // the id of each contract included in this Group. var contracts = group.get('contracts'); // [ 10, 14 ] ``` ## set Sets the value of one or more parameters on the Group. Accepts either a single parameter name and value, or an object of multiple parameter name and value pairs to set. **Note**: This method only applies to *parameters*. All properties must be set when the ClickwrapGroup object is created. ```javascript group.set(parameter, value); ``` ```javascript group.set(parameters); ``` ### Arguments | \_ | NAME | REQUIRED | TYPE | DESCRIPTION | | -------- | ------------ | -------- | ---------------------------------------- | ----------------------------------------------------------------------- | | Option 1 | `parameter` | True | String | The name of the parameter to set. | | | `value` | True | `String, Number, Object, Function, etc.` | The value of the parameter to set. | | Option 2 | `parameters` | True | Object | An object containing one or more parameter name and value pairs to set. | ### Returns No Return Value ### Examples ```javascript // Sets the "alert_message" parameter. group.set('alert_message', 'Please accept all legal contracts.'); ``` ## getAgreed Returns the Group's `contracts`, `versions` and `group` parameters, filtered for accepted contracts only. ```javascript group.getAgreed(); ``` ### Arguments No Arguments ### Returns | | | | -------- | -------------------------------------------------------------------------------- | | `Object` | An object containing the Group's `contracts`, `versions` and `group` parameters. | ### Examples ```javascript // Returns "contracts", "versions" and "group". var params = group.getAgreed(); // Only returns contracts that have been accepted: // { // contracts: [ 10 ], // versions: [ '5589bf606e7b9c1b1deef447' ], // group: 33 // } ``` ## getChecked Returns the Group's `contracts`, `versions` and `group` parameters, filtered to include checked contracts only. ```javascript group.getChecked(filter); ``` ### Arguments | NAME | REQUIRED | TYPE | DESCRIPTION | | -------- | -------- | ------- | ------------------------------------------------------------------------------ | | `filter` | False | Boolean | If `true`, only checked contracts that haven't been accepted will be returned. | ### Returns | | | | -------- | -------------------------------------------------------------------------------- | | `Object` | An object containing the Group's `contracts`, `versions` and `group` parameters. | ### Examples ```javascript // Returns "contracts", "versions" and "group". var params = group.getChecked(); // Only returns contracts that have been checked by the signer: // { // contracts: [ 10 ], // versions: [ '5589bf606e7b9c1b1deef447' ], // group: 33 // } ``` ## send Invokes a `send` command on the Site, with the `contracts`, `versions` and `group` parameters automatically populated with the Group's values. ```javascript group.send(event_type, [parameters]); ``` ### Arguments | NAME | REQUIRED | TYPE | DESCRIPTION | | ------------ | ----------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `event_type` | True | String | The type of the action being sent. Supported values include: `'agreed'`, `'disagreed'`, `'displayed'`, `'visited'` and `'updated'`. | | `parameters` | Conditional | Object | A single object containing parameter name and value pairs to use for this send only. The `contracts`, `versions` and `group` parameters are included by default. | ### Returns No Return Value ### Examples ```javascript // Sends an "agreed" action for the Group. group.send('agreed'); // Automatically adds the Group's parameters to the command: // { // contracts: [ 10, 14 ], // versions: [ '5589bf606e7b9c1b1deef447', '5589bf606e7b9c1b1deef450' ], // group: 33 // } ``` ## sendChecked Sends an `'agreed'` action for the Group's contracts that have been checked. ```javascript group.sendChecked(); ``` ### Arguments No Arguments ### Returns No Return Value ### Examples ```javascript // Sends an "agreed" action for the Group. group.sendChecked(); // Automatically adds the Group's checked contracts to the command: // { // contracts: [ 10 ], // versions: [ '5589bf606e7b9c1b1deef447' ], // group: 33 // } ``` ## render Injects the contract HTML into the page and sends a `retrieve` command if the `signer_id` parameter is set. Once rendered, either `display()` or `displayAll()` is called to show the contracts on the page. ```javascript group.render([force]); ``` ### Arguments | NAME | REQUIRED | TYPE | DESCRIPTION | | ------- | -------- | ------- | ----------------------------------------------- | | `force` | False | Boolean | If true, the Group will be forced to re-render. | ### Returns No Return Value ### Examples ```javascript // Injects the Group's contract HTML into the DOM. group.render(); ``` ## displayRequired Displays only the contracts that haven't been accepted by the signer. ```javascript group.displayRequired(); ``` ### Arguments No Arguments ### Returns No Return Value ### Examples ```javascript // Displays the rendered contracts that need // to be accepted by the signer. group.displayRequired(); ``` ## displayAll Displays all contracts in the Group, even those that have previously been accepted by the signer. **Note**: To invoke this method after `render()`, set the Group's `display_all` property to true. ```javascript group.displayAll(); ``` ### Arguments No Arguments ### Returns No Return Value ### Examples ```javascript // Displays all of the rendered contracts. group.displayAll(); ``` ## hide Hides one or more contracts on the page. ```javascript group.hide(contracts); ``` ### Arguments | NAME | REQUIRED | TYPE | DESCRIPTION | | ----------- | -------- | ------------- | ---------------------------------- | | `contracts` | True | Array`` | The `id` of each contract to hide. | ### Returns No Return Value ### Examples ```javascript // Hides contracts 10 and 14 on the page. group.hide([ 10, 14 ]); ``` ## hideAll Hides all contracts in the Group. ```javascript group.hideAll(); ``` ### Arguments No Arguments ### Returns No Return Value ### Examples ```javascript // Hides all of the Group's contracts on the page. group.hideAll(); ``` ## allChecked Returns a boolean flag indicating if all contracts in the Group have been checked. **Note**: This only factors in the state of the HTML checkbox, and does not consider whether or not `'agreed'` actions have actually been sent to the Activity API. ```javascript group.allChecked(); ``` ### Arguments No Arguments ### Returns | | | | --------- | ---------------------------------------------------------- | | `Boolean` | A flag indicating if every contract's checkbox is checked. | ### Examples ```javascript // Blocks form submission if any contracts are unchecked. $('#submit-button').on('click', function(evt) { if (!group.allChecked()) { alert(group.get('alert_message')); return false; } else { group.send('agreed', { disable_sending: false, function(err) { if (err) handleError(); else form.submit(); } }); } }); ``` ## block Returns a boolean flag indicating if any contracts in the Group still need to be accepted. **Note**: If the Group's `display_all` property is set to `true`, this method will determine if every contract is both accepted *and* checked. ```javascript group.block(); ``` ### Arguments No Arguments ### Returns | | | | --------- | ---------------------------------------------------------------------- | | `Boolean` | A flag indicating if at least one contract still needs to be accepted. | ### Examples ```javascript // Blocks form submission if any contracts // still need to be accepted. $('#submit-button').on('click', function(evt) { if (group.block()) { alert(group.get('alert_message')); return false; } else form.submit(); }); ``` ## getPayload Returns the URL-encoded payload that will be sent to [the Ironclad Clickwrap API](https://clickwrap-developer.ironcladapp.com/reference/send-contracts-signedaccepted-by-signer) upon acceptance, not including the `event_type`. This is especially useful to pass frontend details to the backend for server-side implementations. **Note**: Even if the Group's `disable_sending` property is set to `true`, this method will return the payload that would be sent if automatic sending was allowed. ```javascript group.getPayload(); ``` ### Arguments No Arguments ### Returns | | | | -------- | ---------------------------------------------------------------------------------------------------------------------- | | `String` | A URL-encoded payload including key metadata of the presented contract. Formatted for Ironclad's `/send` API endpoint. | ### Examples ```javascript if(g = _ps.getByKey(groupKey)) { const payload = g.getPayload(); } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/common-data-structures-in-pactsafe.md # Ironclad Clickwrap Terminology Within Ironclad Clickwrap, there is a set of data structures to consider when interacting with the API that will help you formulate the ideal integration: ### Templates / Contract * A contract managed within Ironclad Clickwrap * Can have many versions that are drafted and published * Has both a latest\_version and a published\_version (if a version has been published) ### Contract Version * An instance of a template that is created as a draft, published, and timestamped by its publish or effective date * Acceptances will be tied to a specific contract version and template ### Clickwraps / Clickwrap Groups * "Container" for your contracts where you can manage visual and overall settings * Can contain one or more contracts to present to an individual for review and acceptance ### Snapshot * Screenshot of a webpage or application where a Clickwrap Group is embedded, that represents what a user was presented at time of acceptance. * Can be captured manually or on an automated frequency ### Snapshot Location * A specific container of snapshots that corresponds to the webpage or application where a Snapshot is taken * Snapshot Location types include: * Desktop Web Browser * Mobile Web Browser * Native App ### Legal Centers * A public web page to publicly host and display your legal Contracts. It maintains a version history of the Contracts that you've published and made available. ### Signer * Any person or organization identified by any unique identifier (Signer ID) to your company that is accepting documents * Can accept contracts via clickwrap through a series of events we call Activity . ### Activity * An event that’s logged for a Signer against a given Contract Version and, optionally, a Group. * Common types of events include: * Visited - An individual views a template in the Legal Center * Displayed - An individual viewed the full text of the clickwrap contract (usually by clicking on the link in the clickwrap) * Agreed - A specific `Signer` agreed to a clickwrap contract(s) * Disagreed (optional) - A specific `Signer` disagreed to a clickwrap contract(s). ### Sites * An instance within your Account that holds Templates, Clickwrap Groups, etc. * Sites can be configured as a Sandbox site or a Production site. ### Account * All Signers, Contracts, and Activities live within a Site, which a Site lives within an Account * An Account can have many Sites which act as a sub-tenant within your environment. One Site is your default, which controls how a Contract can be shared across an Account. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/dataobject.md # DataObject This reference documents the properties and methods available on the DataObject. # Properties ## DataObject.keys `Array` An array of all the parameter names stored in the object. ## DataObject.values `Object` An object that holds the persistent name-value pairs stored in the object. ## DataObject.overrides `Object` An object that holds the temporary name-value pairs stored in the object. # Methods ## get Returns the value stored in the object at the given parameter name. data.get(parameter); ### Arguments |NAME|REQUIRED|TYPE|DESCRIPTION| |----|----|----|--------| |`parameter`|True|String|The name of the parameter to return. If an override value exists, that value will be returned.| ### Returns ||| |----|--------| |`String, Number, Boolean, Object, etc.`|The value of the parameter or property, or `undefined` if the parameter isn't set.| ### Examples ```javascript // Returns the "key" parameter. var val = data.get('key'); // 'login-contracts' ``` ## set Sets the value of a parameter by name. ```javascript data.set(parameter, value, override); ``` ### Arguments |NAME|REQUIRED|TYPE|DESCRIPTION| |----|----|----|--------| |`parameter`|True|String|The name of the parameter to set.| |`value`|True|String, Number, Object, Function, etc.|The value of the parameter to set.| |`override`|False|Boolean|A flag indicating if the parameter should be set as a temporary override value. Defaults to `false`.| ### Returns No Return Value ### Examples ```javascript // Sets the "signer_id" parameter. data.set('signer_id', 'john@ironcladhq.com', false); ``` ```javascript // Sets the "contracts" parameter as an override value. data.set('contracts', [ 10, 14 ], true); ``` ## map Invokes a callback function for each name and value pair stored in the object. ```javascript data.map(callback); ``` ### Arguments |NAME|REQUIRED|TYPE|DESCRIPTION| |----|----|----|--------| |`callback`|True|Function|The callback function to execute for each name and value pair. The function receives two arguments: `name` and `value`.| ### Returns No Return Value ### Examples ```javascript // Logs each name and value pair to the console. data.map(function(name, value) { console.log(name + ': ' + value); }); ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/debugging-the-javascript-in-pactsafe.md # Debugging with PS.js You can optionally enable debugging in our JavaScript library by adding a flag right after you load your `_ps('create')` call in our [JavaScript library](https://developer.pactsafe.com/docs/get-to-know-our-javascript-library): ```javascript (function(w,d,s,c,f,n,t,g,a,b,l){w['PactSafeObject']=n;w[n]=w[n]||function(){(w[n].q=w[n].q||[]).push(arguments)},w[n].on=function(){(w[n].e=w[n].e||[]).push(arguments)},w[n].once=function(){(w[n].eo=w[n].eo||[]).push(arguments)},w[n].off=function(){(w[n].o=w[n].o||[]).push(arguments)},w[n].t=1*new Date(),w[n].l=0;a=d.createElement(s);b=d.getElementsByTagName(s)[0];a.async=1;a.src=c;a.onload=a.onreadystatechange=function(){w[n].l=1};a.onerror=a.onabort=function(){w[n].l=0};b.parentNode.insertBefore(a,b);setTimeout(function(){if(!w[n].l&&!w[n].loaded){w[n].error=1;a=d.createElement(s);a.async=1;a.src=f;a.onload=a.onreadystatechange=function(){w[n].l=1};a.onerror=a.onabort=function(){w[n].l=0};b.parentNode.insertBefore(a,b);l=function(u,e){try{e=d.createElement('img');e.src='https://d3r8bdci515tjv.cloudfront.net/error.gif?t='+w[n].t+'&u='+encodeURIComponent(u);d.getElementsByTagName('body')[0].appendChild(e)}catch(x){}};l(c);setTimeout(function(){if(!w[n].l&&!w[n].loaded){w[n].error=1;if(g&&'function'==typeof g){g.call(this);}l(f)}},t)}},t)})(window,document,'script','//vault.pactsafe.io/ps.min.js','//d3l1mqnl5xpsuc.cloudfront.net/ps.min.js','_ps',4000); _ps('create', 'YOUR_ACCESS_ID'); _ps.debug = true; _ps.on('all', function(eventName, allArguments) { console.log('The ' + eventName + ' was just triggered.'); console.log(allArguments); }); ``` By enabling this flag, you'll start seeing all sorts of events in your console and be able to track various events and triggers from our library as you are coding! --- # Source: https://clickwrap-developer.ironcladapp.com/reference/delete-a-signer-1.md # Delete a Signer by Signer ID # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/signers/id:{signer_id}": { "delete": { "summary": "Delete a Signer by Signer ID", "description": "", "operationId": "delete-a-signer", "tags": [ "Signers" ], "parameters": [ { "name": "signer_id", "in": "path", "description": "The Signer ID, URL encoded.", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "schema": { "type": "object", "properties": { "uuid": { "type": "string", "example": "65c2a53d0293acd1651a5a5c" }, "signer_id": { "type": "string", "example": "eric@pactsafe.com" } } } } } }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/delete-activity-by-signer-id.md # Delete activity performed by a signer # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/signers/id:{signer_id}/activity": { "delete": { "summary": "Delete activity performed by a signer", "description": "", "operationId": "delete-activity-by-signer-id", "tags": [ "Signers" ], "parameters": [ { "name": "signer_id", "in": "path", "description": "The signer ID, URL encoded.", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "object", "properties": { "id": { "type": "string", "example": "eric@pactsafe.com" } } } } } } } }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } }, "deprecated": false } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/delete_contracts-contract-id.md # Archive a Contract This will archive a Contract/Template from Ironclad Clickwrap. All associated versions and activities will also be archived. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/contracts/{contract_id}": { "delete": { "summary": "Archive a Contract", "description": "This will archive a Contract/Template from Ironclad Clickwrap. All associated versions and activities will also be archived.", "tags": [ "Contracts" ], "parameters": [ { "in": "path", "name": "contract_id", "description": "The ID of the Contract.", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "responses": { "200": { "description": "Archived Contract.", "content": { "application/json": { "schema": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/delete_groups-group-id.md # Delete a Group Delete a Group by ID # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/groups/{group_id}": { "delete": { "summary": "Delete a Group", "description": "Delete a Group by ID", "tags": [ "Groups" ], "parameters": [ { "in": "path", "name": "group_id", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "responses": { "200": { "description": "Deleted Group", "content": { "application/json": { "schema": { "title": "Group", "type": "object", "properties": { "id": { "type": "integer", "readOnly": true, "default": 0, "example": 1 }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "paused": { "type": "boolean", "readOnly": true }, "paused_by": { "type": "integer", "readOnly": true, "example": 5 }, "paused_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "pending_changes": { "type": "boolean", "readOnly": true }, "name": { "type": "string", "example": "Login Terms" }, "key": { "type": "string", "example": "group-0rsabrt5a" }, "description": { "type": "string", "example": "This is a description of the Login Terms group." }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other groups.", "items": { "type": "string" } }, "type": { "title": "GroupType", "type": "string", "enum": [ "browsewrap", "clickwrap", "form", "policy" ] }, "style": { "title": "GroupStyle", "type": "string", "enum": [ "floating", "full", "scroll", "checkbox", "combined", "embedded" ] }, "custom_styles": { "type": "string", "description": "Custom CSS styles to apply to the embedded clickwrap group." }, "rendered_by_user": { "type": "boolean" }, "expect_agreed_click": { "type": "boolean" }, "expect_disagreed": { "type": "boolean" }, "container_selector": { "type": "string", "description": "The CSS selector for the group container element." }, "signer_id_selector": { "type": "string", "description": "The CSS selector for the input element containing the signer ID value." }, "form_selector": { "type": "string", "description": "The CSS selector for the form element the group belongs to." }, "block_submission": { "type": "boolean", "default": true }, "force_scroll": { "type": "boolean", "default": false }, "auto_run": { "type": "boolean", "default": true }, "display_all": { "type": "boolean", "default": true }, "alert_message": { "type": "string", "default": "Before you can submit this form, you must accept all of our legal contracts." }, "acceptance_language": { "type": "string", "description": "The language to display alongside the group checkbox." }, "confirmation_email": { "type": "boolean", "default": false }, "hide_record_summary": { "type": "boolean", "default": false }, "opt_out_language": { "type": "string" }, "target_jurisdictions": { "type": "array", "items": { "type": "string" } }, "target_selector": { "type": "string" }, "position": { "title": "BrowsewrapPosition", "type": "string", "enum": [ "auto", "left", "right", "center" ] }, "open_legal_center": { "type": "boolean", "default": true }, "always_visible": { "type": "boolean", "default": false }, "badge_text": { "type": "string", "description": "The text to display on the floating browsewrap badge." }, "instructions": { "type": "string" }, "protected_url": { "type": "boolean" }, "redirect_url": { "type": "string" }, "contracts": { "type": "array", "items": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } }, "validate_unique_classifications": { "type": "array", "items": { "type": "string" } }, "dynamic": { "type": "boolean", "default": false }, "render_data": { "type": "object" }, "notification_email": { "type": "string", "description": "The email address to send internal notifications to when a group is accepted." }, "published_endpoint": { "type": "string", "description": "The URL to the published group.", "readOnly": true }, "snapshots_enabled": { "type": "boolean" }, "snapshot_config": { "type": "string" }, "snapshot": { "title": "GroupSnapshot", "type": "object", "properties": { "image_path": { "type": "string" }, "last_captured_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "latest": { "type": "string" } } }, "snapshot_locations": { "type": "array", "items": { "type": "string" } }, "is_associated_with_location": { "type": "boolean", "readOnly": true }, "download_contracts": { "type": "boolean", "default": false } } } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/delete_locations-id.md # Delete a Snapshot location Requires **manage** permissions for Snapshots. Only allow for draft locations now # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "tags": [ { "name": "Snapshots" } ], "paths": { "/locations/{id}": { "delete": { "description": "Requires **manage** permissions for Snapshots. Only allow for draft locations now", "summary": "Delete a Snapshot location", "tags": [ "Snapshots" ], "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Delete a Snapshot location.", "content": { "application/json": { "schema": { "properties": { "data": { "oneOf": [ { "required": [ "platform", "frequency", "published", "published_time", "status", "location_type", "key", "name", "capture_url", "created_time", "updated_time", "created_by", "updated_by", "site", "account", "id" ], "title": "WebLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" } ], "properties": { "capture_attempts": { "type": "integer", "readOnly": true }, "capture_url": { "type": "string" }, "error_message": { "type": "string", "readOnly": true }, "frequency": { "enum": [ "daily", "weekly", "monthly", "never" ], "title": "Frequency", "type": "string" }, "location_type": { "enum": [ "web" ], "title": "LocationTypeWeb", "type": "string" }, "platform": { "enum": [ "desktop", "ios", "android" ], "title": "Platforms", "type": "string" } }, "type": "object" }, { "required": [ "mobile_os", "published", "published_time", "status", "location_type", "key", "name", "application_id", "application_name", "created_by", "updated_by", "site", "account", "created_time", "updated_time", "id" ], "title": "MobileLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" }, { "properties": { "application_id": { "type": "string" }, "application_name": { "type": "string" }, "mobile_os": { "description": "Default 'ios'", "enum": [ "ios", "android" ], "title": "Mobile OS", "type": "string" } } }, { "properties": { "location_type": { "enum": [ "mobile_app" ], "title": "LocationTypeMobile", "type": "string" } } } ], "type": "object" } ], "type": "object" } }, "type": "object" } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/delete_versions-version-id-fields-field-id.md # Delete Field on a Version Delete Field on a Version by Version ID # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/versions/{version_id}/fields/{field_id}": { "delete": { "summary": "Delete Field on a Version", "tags": [ "Versions" ], "parameters": [ { "in": "path", "name": "version_id", "description": "The unique ID of the Contract Version.", "required": true, "schema": { "type": "string" } }, { "in": "path", "name": "field_id", "description": "The unique ID of the Field on the Version.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Deleted Field", "content": { "application/json": { "schema": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/dynamic-groups-and-how-to-use-them.md # Filtering Templates - Virtual Groups Ironclad Clickwrap offers the ability to create multiple templates, filter them, and display the relevant template(s) to the counterparty. This filter can be based on user input, pre-determined conditions, and/or other parameters. This capability is known as **Virtual Groups**. For example, if you plan to embed a Clickwrap Group within your login page, Virtual Groups grant the flexibility to display an English Template to a user located in the United States, and a French Template to user located in France — with both of those Templates within one Clickwrap Group. **Please note:** Loading a group of Contracts in this manner will affect load times on the page and is not subject to normal Ironclad Clickwrap SLAs. If you'd like to optimize how your Contracts are loaded on the page, check out [Loading a Clickwrap 101](https://clickwrap-developer.ironcladapp.com/docs/loading-a-clickwrap-101). Here are additional use cases where Virtual Groups can be utilized: * Displaying an additional agreement if an end-user opts in * Depending on the end user’s location, display a different language contract *** ## Setting up your Ironclad Clickwrap Templates + Groups Please refer to this [help center article](https://support.ironcladapp.com/hc/en-us/articles/14002064111767-Virtual-Groups-Overview) for guidance on setting up your templates and Clickwrap Groups to support Virtual Groups. This includes creating and publishing the relevant templates, applying properties to them, and adding them to a Clickwrap Group in your Ironclad Clickwrap site. When completed, ensure you have the following data points handy: * Group Key * Clickwrap Template filter options > 📘 Filtering Contracts > > Filtering using properties will search through all templates available within your Site. Ensure you have unique properties to ensure you are pulling the correct templates. Additionally, ensure that these filters are specific - Ironclad Clickwrap's filtering will return a **maximum of 100 templates**. *** ## Loading the Group ### Using the Ironclad Clickwrap Snippet When loading your Clickwrap, load the Clickwrap Group you can use the same `_ps('load')` method you would use with your traditional JavaScript library. However, within the groupOptions, add a filter parameter. This is where you can configure your filters to display templates based on the properties you have applied. Depending on the user flow or specific scenario, this filter option allows you to choose the specific template(s) to load onto the screen. ```javascript var groupOptions = { filter: "locale==en-US", } _ps('load', groupKey, groupOptions) ``` ### Using the Activity API When grabbing the load/html or load/json endpoints, include the filter parameter to search through your contracts and the Clickwrap Group key to track acceptance against . ```json https://pactsafe.io/load/html { "sid": "site_id", "filter": "locale==en-US", "group_key":"group_key" } ``` > 📘 Contract Hyperlink > > When using the Activity API, the hyperlink that is included in the Clickwrap Group HTML or JSON body will download a version of the contract if clicked (rather than redirect the user to the Legal Center). ## Tips and Tricks when using Virtual Groups ### Filtering and Sorting Templates Methods to sort through templates include filtering on id, tags, classification, locales, and countries. * `tags==tag1,tag2` will display all contracts with either tag1 or tag2 * `tags==tag1 AND tags==tag2` will display contracts with both tag1 and tag2 Add a "sort" argument to alter the order that the contracts appear in. ```javascript var groupOptions = { filter: "tags==US AND tags==midmarket", sort: "created_time desc" } _ps('load', groupKey, groupOptions) ``` ### Acceptance Language In some scenarios, changing the template(s) that is shown to the end user also requires a change in the acceptance language. A common scenario is language-specific virtual groups. In these use cases, customers often also want the acceptance language to be translated to match the template language. This can be done by overriding the group options that are defined on the Ironclad Clickwrap platform, as shown below. ```javascript var groupOptions = { filter:"tags==test", acceptance_language: "I do declare that {{contracts}} are enforceable" } _ps('load', groupKey, groupOptions) ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/force-scroll-in-group-settings-and-how-to-handle-it-in-your-code.md # Using Force Scroll Inside your [Group settings](https://app.pactsafe.com/groups), you may have noticed the option to "Force Scroll" for a signer. For the "Scroll" and "Embedded" style/layout options, this option will force the user to scroll to the bottom when reviewing a contract before the "I Agree" button or checkbox is enabled: ![](https://cl.ly/2y0f13240r1h/Screen%20Recording%202016-12-12%20at%2003.33%20PM.gif) This Guide will walk you through what this means, when this will affect how contracts are accepted in your code, and how to handle. ## Things you need for this tutorial * A published Group that has "Force Scroll" enabled and either "Scroll" or "Embedded" style/layout enabled. * You need to be up to snuff on the JavaScript library and how it works. [Here's a great guide](https://developer.pactsafe.com/docs/loading-a-clickwrap-101). * Working knowledge of [Triggered Events](https://developer.pactsafe.com/docs/triggered-events-1). There are two callbacks you can manipulate with this functionality (`_ps.on('scrolled:contract', function(){})` and `_ps.on('scrolled', function(){})`). ## Enabling the "Force Scroll" option in a Group When enabling "Force Scroll" in a group, your user will need to follow instructions pretty well. In addition to the language provided as part of what is injected into the page by Ironclad Clickwrap, you may want to add an additional callout to just double check the user knows to scroll before being able to accept the contract. ## Special event callbacks There are two special events/callbacks that are made that you'll want to note in case you want to intercept the scroll to execute some of your own code as part of "Force Scroll": `scrolled:contract` and `scrolled`. We'll explain what each of these do. ### \_ps.on('scrolled:contract') There are two events you can tap into that will be triggered when "Force Scroll" is enabled on your Group. The first, `scrolled:contract` will fire for *each* contract that has reached the bottom: ```javascript _ps.on('scrolled:contract', function(contractHTML, group){ // you can output what is passed in this callback like so // this is called for EACH contract that the user reaches // the bottom of... console.log(arguments); console.log("Bottom of a contract has been reached!"); }); ``` `contractHTML` is the HTML of the contract which has been scrolled. `group` is a ClickwrapGroup object. This object contains all the metadata about the group including contract IDs, version IDs, etc. Example usage: `group.get('versions');` ### \_ps.on('scrolled') The second event that's fired is `scrolled` and will trigger when *all* contracts have been fully scrolled: ```javascript _ps.on('scrolled', function(contractsElement, group){ // you can output what is passed in this callback like so console.log(arguments); console.log("Every contract has been scrolled! Yewwww!"); }); ``` `contractsElement` is the object for `container_selector` for the contracts set either in the Group settings or on the page using `_ps('load')`. Example usage: `contractsElement.innerHTML` `group` is a ClickwrapGroup object. This object contains all the metadata about the group including contract IDs, version IDs, etc. Example usage: `group.get('versions');` ## Doing something custom once a user has scrolled Let's run through an example to see how this functionality would look An example that you might use to keep the user posted of their progress would be to upload a progress bar every time the user completes scrolling on an agreement. Then, when the user completes all the agreements we want to show a disabled "Submit" button. Once all agreements have been accepted, enable the submit button. ```javascript // add jQuery to get this sample to work var progressBar = function(addPercentage){ // add a progress bar and update the progress here } // for each contract, update a progress bar 50% _ps.on('scrolled:contract', function(contractsElement, group){ updateProgressBar(50); }); _ps.on('scrolled', function(contractsElement, group){ $('#submit-btn').show(); $('#submit-btn').prop('disabled', true); }); _ps.on('valid', function(){ // once all contracts in a group have been accepted, the // 'valid' event is triggered enabling the submit btn $('#submit-btn').prop('disabled', false); }); ``` And just like that, you're integrating scrolling magic into your code. Happy coding! --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get-your-account-details-1.md # Retrieve Your Account # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/accounts/{account_id}": { "get": { "summary": "Retrieve Your Account", "description": "", "operationId": "get-your-account-details", "tags": [ "Accounts" ], "parameters": [ { "name": "account_id", "in": "path", "description": "The ID of the PactSafe Account.", "schema": { "type": "integer", "format": "integer" }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "integer", "example": 1, "default": 0, "readOnly": true }, "name": { "type": "string", "example": "iLawNow" }, "key": { "type": "string", "example": "ilawnow" }, "email_display_name": { "type": "string", "example": "iLawNow, Inc." }, "email_reply_address": { "type": "string", "example": "team@ilawnow.com" }, "created_by": { "type": "integer", "example": 1, "default": 0, "readOnly": true }, "updated_by": { "type": "integer", "example": 1, "default": 0, "readOnly": true }, "company_information": { "type": "object", "properties": { "street": { "type": "string" }, "name": { "type": "string" }, "city": { "type": "string" }, "state": { "type": "string" }, "postal_code": { "type": "string" }, "phone": { "type": "string" } } }, "billing": { "type": "object", "properties": { "first_name": { "type": "string" }, "last_name": { "type": "string" }, "email": { "type": "string" }, "notify": { "type": "string" }, "cc_emails": { "type": "string" }, "company_name": { "type": "string" }, "address": { "type": "object" }, "updated_time": { "type": "string", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true } } }, "subscription": { "type": "object", "properties": { "plan": { "type": "string", "example": "developer", "readOnly": true }, "active": { "type": "boolean", "example": true, "readOnly": true }, "status": { "type": "string", "example": "active", "readOnly": true }, "term_start_date": { "type": "string", "example": "2015-07-12T21:28:39.000Z", "readOnly": true }, "term_end_date": { "type": "string", "example": "2015-07-12T21:28:39.000Z", "readOnly": true }, "total_cost": { "type": "number", "readOnly": true }, "setup_cost": { "type": "number", "readOnly": true }, "payment_interval": { "type": "string", "readOnly": true }, "payment_method": { "type": "string", "readOnly": true }, "is_customer": { "type": "boolean", "readOnly": true }, "uuid": { "type": "string", "readOnly": true }, "notes": { "type": "string", "readOnly": true } } }, "usage": { "type": "object", "properties": { "published_locations": { "type": "integer", "readOnly": true } } }, "limits": { "type": "object", "readOnly": true, "properties": { "acceptances": { "type": "integer", "readOnly": true }, "signers": { "type": "integer", "readOnly": true }, "contracts": { "type": "integer", "readOnly": true }, "groups": { "type": "integer", "readOnly": true }, "requests_sent": { "type": "integer", "readOnly": true }, "users": { "type": "integer", "readOnly": true }, "sites": { "type": "integer", "readOnly": true }, "api_requests": { "type": "integer", "readOnly": true }, "published_locations": { "type": "integer", "readOnly": true } } }, "enforce_limits": { "type": "boolean", "readOnly": true }, "password_security": { "type": "object", "properties": { "duration": { "type": "integer", "readOnly": true }, "reuse": { "type": "integer", "readOnly": true } } }, "reseller": { "type": "boolean", "example": false, "default": true, "readOnly": true }, "updated_time": { "type": "string", "example": "2015-06-12T21:28:39.993Z", "readOnly": true }, "created_time": { "type": "string", "example": "2015-06-12T21:28:39.982Z", "readOnly": true } } } } } } }, "deprecated": false } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_activity-activity-id-record.md # Retrieve PDF Record by ID Retrieve a PDF Record of a Clickwrap Action by Action ID # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/activity/{activity_id}/record": { "get": { "description": "Retrieve a PDF Record of a Clickwrap Action by Action ID", "summary": "Retrieve PDF Record by ID", "tags": [ "Activity" ], "parameters": [ { "in": "path", "name": "activity_id", "description": "The ID of the Activity.", "required": true, "schema": { "type": "string" } }, { "in": "query", "name": "filename", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "A PDF Record for a Clickwrap Action", "content": { "application/pdf": { "schema": { "type": "string", "format": "binary" } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_activity-activity-id.md # Retrieve an Activity Retrieve a Clickwrap Action by ID. ###📘 Apply Site Settings Append `?expand=site` as a query parameter to the request to view and apply your site settings. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/activity/{activity_id}": { "get": { "description": "Retrieve a Clickwrap Action by ID.\n\n###📘 Apply Site Settings\nAppend `?expand=site` as a query parameter to the request to view and apply your site settings.\n", "summary": "Retrieve an Activity", "tags": [ "Activity" ], "parameters": [ { "in": "path", "name": "activity_id", "required": true, "description": "The ID of the Activity.", "schema": { "type": "string" } } ], "responses": { "200": { "description": "A Clickwrap Action", "content": { "application/json": { "schema": { "type": "object", "properties": { "uuid": { "type": "string", "example": "55e0820564a5846a5a0387c4" }, "version": { "type": "string", "example": "55dccf164e10cbd8454d7951" }, "custom_data": { "type": "object" }, "connection_data": { "type": "object", "properties": { "page_title": { "type": "string", "example": "Responsive website template for products" }, "page_url": { "type": "string", "example": "http://localhost/demos/ilawnow/signup.html?__ps-agreements=false" }, "page_domain": { "type": "string", "example": "localhost:8888" }, "page_path": { "type": "string", "example": "/demos/ilawnow/signup.html" }, "page_query": { "type": "string", "example": "foo" }, "hostname": { "type": "string", "example": "response.pactsafe.com" }, "referrer": { "type": "string", "example": "http://localhost:8888/demos/ilawnow/signup.html?__ps-agreements=false" }, "browser_timezone": { "type": "string", "example": "4" }, "browser_locale": { "type": "string", "example": "en-us" }, "user_agent": { "type": "string", "example": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36" }, "device_fingerprint": { "type": "string", "example": "foo" }, "operating_system": { "type": "string", "example": "MacOS" }, "environment": { "type": "string", "example": "desktop" }, "screen_color_depth": { "type": "string", "example": "24-bit" }, "screen_resolution": { "type": "string", "example": "1680x1050" }, "cookies": { "type": "string", "example": "foo" }, "remote_address": { "type": "string", "example": "172.31.43.73" } } }, "site": { "readOnly": true, "type": "integer" }, "account": { "readOnly": true, "type": "integer" }, "signer_id": { "type": "string", "example": "ironclad@example.com" }, "group": { "type": "integer" }, "contract": { "type": "integer" }, "event_type": { "enum": [ "agreed", "disagreed", "displayed" ], "title": "EventType", "type": "string" }, "batch": { "type": "string", "example": "1442324122234" }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "id": { "readOnly": true, "type": "string", "example": "55f81e9a949601b976734da9" } } } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_activity-record-session-session-id.md # Retrieve PDF Record by Session ID Retrieve a PDF of a Clickwrap Request or Signer Record by Session ID # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/activity/record/session:{session_id}": { "get": { "description": "Retrieve a PDF of a Clickwrap Request or Signer Record by Session ID", "summary": "Retrieve PDF Record by Session ID", "tags": [ "Activity" ], "parameters": [ { "in": "path", "name": "session_id", "required": true, "description": "The unique session ID used when capturing the activity event(s). This route can be used to consolidate the activity of the session into a single PDF file.\n", "schema": { "type": "string" } }, { "in": "query", "name": "signer_id", "required": true, "description": "URL encoded Signer ID.", "schema": { "type": "string" } } ], "responses": { "200": { "description": "A PDF Record for a Clickwrap Request or Signer Summary", "content": { "application/pdf": { "schema": { "type": "string", "format": "binary" } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_activity.md # List all Activity. List Clickwrap Actions within the context of the User (across all Sites and Accounts) # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/activity": { "get": { "description": "List Clickwrap Actions within the context of the User (across all Sites and Accounts)", "summary": "List all Activity.", "tags": [ "Activity" ], "parameters": [ { "in": "query", "name": "page", "description": "Page number to offset results for pagination. Defaults to 1.", "schema": { "type": "integer" } }, { "in": "query", "name": "per_page", "schema": { "type": "integer" } }, { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "query", "name": "filter", "description": "Filter activities by the various fields. Note the use of 'and' between the fields. Example: `event_type==agreed and signer_id==claddy@ironcladapp.com`.\n", "schema": { "type": "string" } } ], "responses": { "200": { "description": "An array of Clickwrap Actions", "content": { "application/json": { "schema": { "allOf": [ { "properties": { "count": { "type": "integer" }, "has_more": { "type": "boolean" }, "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total_count": { "type": "integer" } }, "title": "Collection", "type": "object" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "type": "object", "properties": { "uuid": { "type": "string", "example": "55e0820564a5846a5a0387c4" }, "version": { "type": "string", "example": "55dccf164e10cbd8454d7951" }, "custom_data": { "type": "object" }, "connection_data": { "type": "object", "properties": { "page_title": { "type": "string", "example": "Responsive website template for products" }, "page_url": { "type": "string", "example": "http://localhost/demos/ilawnow/signup.html?__ps-agreements=false" }, "page_domain": { "type": "string", "example": "localhost:8888" }, "page_path": { "type": "string", "example": "/demos/ilawnow/signup.html" }, "page_query": { "type": "string", "example": "foo" }, "hostname": { "type": "string", "example": "response.pactsafe.com" }, "referrer": { "type": "string", "example": "http://localhost:8888/demos/ilawnow/signup.html?__ps-agreements=false" }, "browser_timezone": { "type": "string", "example": "4" }, "browser_locale": { "type": "string", "example": "en-us" }, "user_agent": { "type": "string", "example": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36" }, "device_fingerprint": { "type": "string", "example": "foo" }, "operating_system": { "type": "string", "example": "MacOS" }, "environment": { "type": "string", "example": "desktop" }, "screen_color_depth": { "type": "string", "example": "24-bit" }, "screen_resolution": { "type": "string", "example": "1680x1050" }, "cookies": { "type": "string", "example": "foo" }, "remote_address": { "type": "string", "example": "172.31.43.73" } } }, "site": { "readOnly": true, "type": "integer" }, "account": { "readOnly": true, "type": "integer" }, "signer_id": { "type": "string", "example": "ironclad@example.com" }, "group": { "type": "integer" }, "contract": { "type": "integer" }, "event_type": { "enum": [ "agreed", "disagreed", "displayed" ], "title": "EventType", "type": "string" }, "batch": { "type": "string", "example": "1442324122234" }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "id": { "readOnly": true, "type": "string", "example": "55f81e9a949601b976734da9" } } } } } } ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_contracts-contract-id-versions-latest.md # Retrieve Latest Version This Version may be in a published or draft state. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/contracts/{contract_id}/versions/@latest": { "get": { "summary": "Retrieve Latest Version", "description": "This Version may be in a published or draft state.", "tags": [ "Contracts" ], "parameters": [ { "in": "path", "name": "contract_id", "description": "The ID of your contract.", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "responses": { "200": { "description": "A Contract Version", "content": { "application/json": { "schema": { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_contracts-contract-id-versions-published.md # Retrieve Latest Published Version This will return the latest published Version of a Contract. Adding Dynamic Data: Append `/render` to the URL endpoint, switch to a `POST` call, and add your dynamic data within a `render_data` JSON param to utilize tokens and personalize your contracts. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/contracts/{contract_id}/versions/@published": { "get": { "summary": "Retrieve Latest Published Version", "description": "This will return the latest published Version of a Contract.\n\nAdding Dynamic Data: Append `/render` to the URL endpoint, switch to a `POST` call, and add your dynamic data within a `render_data`\nJSON param to utilize tokens and personalize your contracts.\n", "tags": [ "Contracts" ], "parameters": [ { "in": "path", "name": "contract_id", "description": "The ID of your contract.", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "responses": { "200": { "description": "A Contract Version", "content": { "application/json": { "schema": { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_contracts-contract-id-versions-version-number.md # Retrieve a Version by Number Note: This is not by the id of the Version. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/contracts/{contract_id}/versions/{version_number}": { "get": { "summary": "Retrieve a Version by Number", "description": "Note: This is not by the id of the Version.\n", "tags": [ "Contracts" ], "parameters": [ { "in": "path", "name": "contract_id", "description": "The ID of your contract.", "required": true, "schema": { "type": "integer", "format": "integer" } }, { "in": "path", "name": "version_number", "description": "Numeric number of the Version (e.g., version 1 of Agreement with id 1).", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "responses": { "200": { "description": "A Contract Version", "content": { "application/json": { "schema": { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_contracts-contract-id-versions.md # List Versions of a Contract List Versions of a Contract # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/contracts/{contract_id}/versions": { "get": { "summary": "List Versions of a Contract", "tags": [ "Contracts" ], "parameters": [ { "in": "query", "name": "page", "description": "Page number to offset results for pagination. Defaults to 1.", "schema": { "type": "integer" } }, { "in": "query", "name": "per_page", "schema": { "type": "integer" } }, { "in": "query", "name": "filter", "description": "Filter activities by the various fields. Note the use of 'and' between the fields. Example: `event_type==agreed and signer_id==claddy@ironcladapp.com`.\n", "schema": { "type": "string" } }, { "in": "query", "name": "sort", "description": "Sort the results of your call by a field in the Request.", "schema": { "type": "string" } }, { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "query", "name": "fields", "schema": { "type": "string" } }, { "in": "path", "name": "contract_id", "description": "The ID of your contract.", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "object", "allOf": [ { "properties": { "count": { "type": "integer" }, "has_more": { "type": "boolean" }, "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total_count": { "type": "integer" } }, "title": "Collection", "type": "object" }, { "properties": { "data": { "type": "array", "items": { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] } } } } ] } } }, "description": "An array of Contract Versions" }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_contracts-contract-id.md # Retrieve a Contract Note: You can also pass a query string parameter `expand=latest_version` to return the latest version for each Agreement within your response. Returning the latest version contains an extra property with the Version object containing the latest Version. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/contracts/{contract_id}": { "get": { "summary": "Retrieve a Contract", "description": "Note: You can also pass a query string parameter `expand=latest_version` to return the latest version for each Agreement within your response.\nReturning the latest version contains an extra property with the Version object containing the latest Version.\n", "tags": [ "Contracts" ], "parameters": [ { "in": "query", "name": "fields", "schema": { "type": "string" } }, { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "path", "name": "contract_id", "description": "The ID of the Contract.", "required": true, "schema": { "type": "integer", "format": "integer" } }, { "in": "query", "name": "includeArchived", "description": "Determine if archived contracts should be included in the result", "schema": { "type": "boolean", "default": false } } ], "responses": { "200": { "description": "A Contract.", "content": { "application/json": { "schema": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_contracts.md # List all Contracts List contracts in an Account # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/contracts": { "get": { "summary": "List all Contracts", "tags": [ "Contracts" ], "parameters": [ { "in": "query", "name": "page", "description": "Page number to offset results for pagination. Defaults to 1.", "schema": { "type": "integer" } }, { "in": "query", "name": "per_page", "schema": { "type": "integer" } }, { "in": "query", "name": "filter", "description": "Filter activities by the various fields. Note the use of 'and' between the fields. Example: `event_type==agreed and signer_id==claddy@ironcladapp.com`.\n", "schema": { "type": "string" } }, { "in": "query", "name": "sort", "description": "Sort the results of your call by a field in the Request.", "schema": { "type": "string" } }, { "in": "query", "name": "fields", "schema": { "type": "string" } }, { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "query", "name": "includeArchived", "description": "Determine if archived contracts should be included in the result", "schema": { "type": "boolean", "default": false } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "object", "allOf": [ { "properties": { "count": { "type": "integer" }, "has_more": { "type": "boolean" }, "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total_count": { "type": "integer" } }, "title": "Collection", "type": "object" }, { "properties": { "data": { "type": "array", "items": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } } } } ] } } }, "description": "An array of Contracts" }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_extract-evidence-id-urls.md # Retrieve Export Job URLs Retrieve the presigned urls of an export job if it is complete # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/extract/evidence/{id}/urls": { "get": { "description": "Retrieve the presigned urls of an export job if it is complete", "summary": "Retrieve Export Job URLs", "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } } ], "tags": [ "Extraction" ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "object", "properties": { "presignedUrls": { "type": "array", "items": { "type": "string" } }, "error": { "type": "string", "description": "The potential error message" } } }, "examples": { "Success": { "value": { "clickwrap_activities": [ "https://storage.googleapis.com/**" ] } }, "Failure": { "value": { "error": "Fail to fetch to presigned url." } } } } }, "description": "An array of presigned urls." }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_extract-evidence-id.md # Get an Export Job by ID Get an export job by id. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/extract/evidence/{id}": { "get": { "description": "Get an export job by id.", "summary": "Get an Export Job by ID", "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } } ], "tags": [ "Extraction" ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "job_name": { "type": "string" }, "status": { "enum": [ "pending", "scheduled", "started", "success", "failed" ], "title": "Status", "type": "string" }, "source": { "enum": [ "manual", "cron", "api" ], "title": "Source", "type": "string" }, "account": { "readOnly": true, "type": "integer" }, "site": { "readOnly": true, "type": "integer" }, "created_by": { "readOnly": true, "type": "integer" }, "active": { "type": "boolean" }, "message": { "type": "string" }, "created_time": { "type": "string", "description": "ISO 8601 formatted." }, "updated_time": { "type": "string", "description": "ISO 8601 formatted." }, "data": { "type": "object" }, "retry_count": { "type": "integer" } }, "title": "ScheduledJobResponse", "type": "object" } } }, "description": "A scheduled job object." }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_extract-evidence.md # List all Export Jobs Get all export jobs. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/extract/evidence": { "get": { "description": "Get all export jobs.", "summary": "List all Export Jobs", "tags": [ "Extraction" ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "object", "allOf": [ { "properties": { "count": { "type": "integer" }, "has_more": { "type": "boolean" }, "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total_count": { "type": "integer" } }, "title": "Collection", "type": "object" }, { "properties": { "data": { "type": "array", "items": { "properties": { "job_name": { "type": "string" }, "status": { "enum": [ "pending", "scheduled", "started", "success", "failed" ], "title": "Status", "type": "string" }, "source": { "enum": [ "manual", "cron", "api" ], "title": "Source", "type": "string" }, "account": { "readOnly": true, "type": "integer" }, "site": { "readOnly": true, "type": "integer" }, "created_by": { "readOnly": true, "type": "integer" }, "active": { "type": "boolean" }, "message": { "type": "string" }, "created_time": { "type": "string", "description": "ISO 8601 formatted." }, "updated_time": { "type": "string", "description": "ISO 8601 formatted." }, "data": { "type": "object" }, "retry_count": { "type": "integer" } }, "title": "ScheduledJobResponse", "type": "object" } } } } ] } } }, "description": "An array of scheduled export jobs." }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_groups-group-id.md # Retrieve a Group by ID Retrieve a Group by ID # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/groups/{group_id}": { "get": { "summary": "Retrieve a Group by ID", "description": "Retrieve a Group by ID", "tags": [ "Groups" ], "parameters": [ { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "query", "name": "fields", "schema": { "type": "string" } }, { "in": "path", "name": "group_id", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "responses": { "200": { "description": "A Group", "content": { "application/json": { "schema": { "title": "Group", "type": "object", "properties": { "id": { "type": "integer", "readOnly": true, "default": 0, "example": 1 }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "paused": { "type": "boolean", "readOnly": true }, "paused_by": { "type": "integer", "readOnly": true, "example": 5 }, "paused_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "pending_changes": { "type": "boolean", "readOnly": true }, "name": { "type": "string", "example": "Login Terms" }, "key": { "type": "string", "example": "group-0rsabrt5a" }, "description": { "type": "string", "example": "This is a description of the Login Terms group." }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other groups.", "items": { "type": "string" } }, "type": { "title": "GroupType", "type": "string", "enum": [ "browsewrap", "clickwrap", "form", "policy" ] }, "style": { "title": "GroupStyle", "type": "string", "enum": [ "floating", "full", "scroll", "checkbox", "combined", "embedded" ] }, "custom_styles": { "type": "string", "description": "Custom CSS styles to apply to the embedded clickwrap group." }, "rendered_by_user": { "type": "boolean" }, "expect_agreed_click": { "type": "boolean" }, "expect_disagreed": { "type": "boolean" }, "container_selector": { "type": "string", "description": "The CSS selector for the group container element." }, "signer_id_selector": { "type": "string", "description": "The CSS selector for the input element containing the signer ID value." }, "form_selector": { "type": "string", "description": "The CSS selector for the form element the group belongs to." }, "block_submission": { "type": "boolean", "default": true }, "force_scroll": { "type": "boolean", "default": false }, "auto_run": { "type": "boolean", "default": true }, "display_all": { "type": "boolean", "default": true }, "alert_message": { "type": "string", "default": "Before you can submit this form, you must accept all of our legal contracts." }, "acceptance_language": { "type": "string", "description": "The language to display alongside the group checkbox." }, "confirmation_email": { "type": "boolean", "default": false }, "hide_record_summary": { "type": "boolean", "default": false }, "opt_out_language": { "type": "string" }, "target_jurisdictions": { "type": "array", "items": { "type": "string" } }, "target_selector": { "type": "string" }, "position": { "title": "BrowsewrapPosition", "type": "string", "enum": [ "auto", "left", "right", "center" ] }, "open_legal_center": { "type": "boolean", "default": true }, "always_visible": { "type": "boolean", "default": false }, "badge_text": { "type": "string", "description": "The text to display on the floating browsewrap badge." }, "instructions": { "type": "string" }, "protected_url": { "type": "boolean" }, "redirect_url": { "type": "string" }, "contracts": { "type": "array", "items": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } }, "validate_unique_classifications": { "type": "array", "items": { "type": "string" } }, "dynamic": { "type": "boolean", "default": false }, "render_data": { "type": "object" }, "notification_email": { "type": "string", "description": "The email address to send internal notifications to when a group is accepted." }, "published_endpoint": { "type": "string", "description": "The URL to the published group.", "readOnly": true }, "snapshots_enabled": { "type": "boolean" }, "snapshot_config": { "type": "string" }, "snapshot": { "title": "GroupSnapshot", "type": "object", "properties": { "image_path": { "type": "string" }, "last_captured_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "latest": { "type": "string" } } }, "snapshot_locations": { "type": "array", "items": { "type": "string" } }, "is_associated_with_location": { "type": "boolean", "readOnly": true }, "download_contracts": { "type": "boolean", "default": false } } } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_groups-key-group-key.md # Retrieve a Group by Key Retrieve a Group by Key # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/groups/key:{group_key}": { "get": { "summary": "Retrieve a Group by Key", "description": "Retrieve a Group by Key", "tags": [ "Groups" ], "parameters": [ { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "query", "name": "fields", "schema": { "type": "string" } }, { "in": "path", "name": "group_key", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "A Group", "content": { "application/json": { "schema": { "title": "Group", "type": "object", "properties": { "id": { "type": "integer", "readOnly": true, "default": 0, "example": 1 }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "paused": { "type": "boolean", "readOnly": true }, "paused_by": { "type": "integer", "readOnly": true, "example": 5 }, "paused_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "pending_changes": { "type": "boolean", "readOnly": true }, "name": { "type": "string", "example": "Login Terms" }, "key": { "type": "string", "example": "group-0rsabrt5a" }, "description": { "type": "string", "example": "This is a description of the Login Terms group." }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other groups.", "items": { "type": "string" } }, "type": { "title": "GroupType", "type": "string", "enum": [ "browsewrap", "clickwrap", "form", "policy" ] }, "style": { "title": "GroupStyle", "type": "string", "enum": [ "floating", "full", "scroll", "checkbox", "combined", "embedded" ] }, "custom_styles": { "type": "string", "description": "Custom CSS styles to apply to the embedded clickwrap group." }, "rendered_by_user": { "type": "boolean" }, "expect_agreed_click": { "type": "boolean" }, "expect_disagreed": { "type": "boolean" }, "container_selector": { "type": "string", "description": "The CSS selector for the group container element." }, "signer_id_selector": { "type": "string", "description": "The CSS selector for the input element containing the signer ID value." }, "form_selector": { "type": "string", "description": "The CSS selector for the form element the group belongs to." }, "block_submission": { "type": "boolean", "default": true }, "force_scroll": { "type": "boolean", "default": false }, "auto_run": { "type": "boolean", "default": true }, "display_all": { "type": "boolean", "default": true }, "alert_message": { "type": "string", "default": "Before you can submit this form, you must accept all of our legal contracts." }, "acceptance_language": { "type": "string", "description": "The language to display alongside the group checkbox." }, "confirmation_email": { "type": "boolean", "default": false }, "hide_record_summary": { "type": "boolean", "default": false }, "opt_out_language": { "type": "string" }, "target_jurisdictions": { "type": "array", "items": { "type": "string" } }, "target_selector": { "type": "string" }, "position": { "title": "BrowsewrapPosition", "type": "string", "enum": [ "auto", "left", "right", "center" ] }, "open_legal_center": { "type": "boolean", "default": true }, "always_visible": { "type": "boolean", "default": false }, "badge_text": { "type": "string", "description": "The text to display on the floating browsewrap badge." }, "instructions": { "type": "string" }, "protected_url": { "type": "boolean" }, "redirect_url": { "type": "string" }, "contracts": { "type": "array", "items": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } }, "validate_unique_classifications": { "type": "array", "items": { "type": "string" } }, "dynamic": { "type": "boolean", "default": false }, "render_data": { "type": "object" }, "notification_email": { "type": "string", "description": "The email address to send internal notifications to when a group is accepted." }, "published_endpoint": { "type": "string", "description": "The URL to the published group.", "readOnly": true }, "snapshots_enabled": { "type": "boolean" }, "snapshot_config": { "type": "string" }, "snapshot": { "title": "GroupSnapshot", "type": "object", "properties": { "image_path": { "type": "string" }, "last_captured_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "latest": { "type": "string" } } }, "snapshot_locations": { "type": "array", "items": { "type": "string" } }, "is_associated_with_location": { "type": "boolean", "readOnly": true }, "download_contracts": { "type": "boolean", "default": false } } } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_groups.md # List all Groups List all groups available to the current user # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/groups": { "get": { "summary": "List all Groups", "description": "List all groups available to the current user", "tags": [ "Groups" ], "parameters": [ { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "query", "name": "fields", "schema": { "type": "string" } }, { "in": "query", "name": "filter", "description": "Filter activities by the various fields. Note the use of 'and' between the fields. Example: `event_type==agreed and signer_id==claddy@ironcladapp.com`.\n", "schema": { "type": "string" } }, { "in": "query", "name": "page", "description": "Page number to offset results for pagination. Defaults to 1.", "schema": { "type": "integer" } }, { "in": "query", "name": "per_page", "schema": { "type": "integer" } }, { "in": "query", "name": "sort", "description": "Sort the results of your call by a field in the Request.", "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "object", "allOf": [ { "properties": { "count": { "type": "integer" }, "has_more": { "type": "boolean" }, "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total_count": { "type": "integer" } }, "title": "Collection", "type": "object" }, { "properties": { "data": { "type": "array", "items": { "title": "Group", "type": "object", "properties": { "id": { "type": "integer", "readOnly": true, "default": 0, "example": 1 }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "paused": { "type": "boolean", "readOnly": true }, "paused_by": { "type": "integer", "readOnly": true, "example": 5 }, "paused_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "pending_changes": { "type": "boolean", "readOnly": true }, "name": { "type": "string", "example": "Login Terms" }, "key": { "type": "string", "example": "group-0rsabrt5a" }, "description": { "type": "string", "example": "This is a description of the Login Terms group." }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other groups.", "items": { "type": "string" } }, "type": { "title": "GroupType", "type": "string", "enum": [ "browsewrap", "clickwrap", "form", "policy" ] }, "style": { "title": "GroupStyle", "type": "string", "enum": [ "floating", "full", "scroll", "checkbox", "combined", "embedded" ] }, "custom_styles": { "type": "string", "description": "Custom CSS styles to apply to the embedded clickwrap group." }, "rendered_by_user": { "type": "boolean" }, "expect_agreed_click": { "type": "boolean" }, "expect_disagreed": { "type": "boolean" }, "container_selector": { "type": "string", "description": "The CSS selector for the group container element." }, "signer_id_selector": { "type": "string", "description": "The CSS selector for the input element containing the signer ID value." }, "form_selector": { "type": "string", "description": "The CSS selector for the form element the group belongs to." }, "block_submission": { "type": "boolean", "default": true }, "force_scroll": { "type": "boolean", "default": false }, "auto_run": { "type": "boolean", "default": true }, "display_all": { "type": "boolean", "default": true }, "alert_message": { "type": "string", "default": "Before you can submit this form, you must accept all of our legal contracts." }, "acceptance_language": { "type": "string", "description": "The language to display alongside the group checkbox." }, "confirmation_email": { "type": "boolean", "default": false }, "hide_record_summary": { "type": "boolean", "default": false }, "opt_out_language": { "type": "string" }, "target_jurisdictions": { "type": "array", "items": { "type": "string" } }, "target_selector": { "type": "string" }, "position": { "title": "BrowsewrapPosition", "type": "string", "enum": [ "auto", "left", "right", "center" ] }, "open_legal_center": { "type": "boolean", "default": true }, "always_visible": { "type": "boolean", "default": false }, "badge_text": { "type": "string", "description": "The text to display on the floating browsewrap badge." }, "instructions": { "type": "string" }, "protected_url": { "type": "boolean" }, "redirect_url": { "type": "string" }, "contracts": { "type": "array", "items": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } }, "validate_unique_classifications": { "type": "array", "items": { "type": "string" } }, "dynamic": { "type": "boolean", "default": false }, "render_data": { "type": "object" }, "notification_email": { "type": "string", "description": "The email address to send internal notifications to when a group is accepted." }, "published_endpoint": { "type": "string", "description": "The URL to the published group.", "readOnly": true }, "snapshots_enabled": { "type": "boolean" }, "snapshot_config": { "type": "string" }, "snapshot": { "title": "GroupSnapshot", "type": "object", "properties": { "image_path": { "type": "string" }, "last_captured_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "latest": { "type": "string" } } }, "snapshot_locations": { "type": "array", "items": { "type": "string" } }, "is_associated_with_location": { "type": "boolean", "readOnly": true }, "download_contracts": { "type": "boolean", "default": false } } } } } } ] } } }, "description": "An array of Groups" }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_locations-id-snapshots-record-timestamp.md # Get a Snapshot record for a timestamp. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "tags": [ { "name": "Snapshots" } ], "paths": { "/locations/{id}/snapshots/record/{timestamp}": { "get": { "tags": [ "Snapshots" ], "summary": "Get a Snapshot record for a timestamp.", "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } }, { "in": "path", "name": "timestamp", "required": true, "description": "ISO 8601 formatted.", "example": "2022-04-01T00:00:00+00:00", "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/pdf": { "schema": { "type": "string", "format": "binary" } } }, "description": "A Snapshot PDF record." }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_locations-id-snapshots-snapshotid-record.md # Get a Snapshot record for a specific Snapshot. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "tags": [ { "name": "Snapshots" } ], "paths": { "/locations/{id}/snapshots/{snapshotId}/record": { "get": { "tags": [ "Snapshots" ], "summary": "Get a Snapshot record for a specific Snapshot.", "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } }, { "in": "path", "name": "snapshotId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/pdf": { "schema": { "type": "string", "format": "binary" } } }, "description": "A Snapshot PDF record." }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_locations-id-snapshots-snapshotid.md # Get a Snapshot. User requires **view** or **manage** permission. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "tags": [ { "name": "Snapshots" } ], "paths": { "/locations/{id}/snapshots/{snapshotId}": { "get": { "tags": [ "Snapshots" ], "summary": "Get a Snapshot.", "description": "User requires **view** or **manage** permission.", "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } }, { "in": "path", "name": "snapshotId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "A Snapshot.", "content": { "application/json": { "schema": { "properties": { "data": { "title": "Snapshot", "type": "object", "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_by": { "readOnly": true, "type": "integer" }, "archived_reason": { "type": "string" }, "captured_time": { "description": "ISO 8601 formatted.", "type": "string" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "expiration_time": { "readOnly": true, "type": "string" }, "id": { "readOnly": true, "type": "string" }, "image_path": { "readOnly": true, "type": "string" }, "is_manual": { "readOnly": true, "type": "boolean" }, "is_test": { "type": "boolean" }, "metadata": { "oneOf": [ { "type": "object", "title": "SnapshotWebMetadata", "properties": { "captured_time": { "description": "ISO 8601 formatted.", "type": "string" }, "page_url": { "type": "string" }, "selector": { "type": "string" }, "useragent": { "properties": { "browser": { "properties": { "major": { "type": "string" }, "name": { "type": "string" } }, "type": "object" }, "os": { "properties": { "name": { "type": "string" }, "version": { "type": "string" } }, "type": "object" } }, "type": "object" }, "viewport": { "properties": { "height": { "type": "integer" }, "width": { "type": "integer" } }, "type": "object" } } }, { "type": "object", "title": "SnapshotMobileMetadata", "properties": { "app_name": { "type": "string" }, "app_version": { "type": "string" }, "captured_time": { "type": "string", "description": "ISO 8601 formatted." }, "device_model": { "type": "string" }, "device_os": { "type": "string" }, "resolution": { "type": "string" } } } ], "type": "object" }, "site": { "readOnly": true, "type": "integer" }, "snapshot_download_url": { "readOnly": true, "type": "string" }, "snapshot_location": { "readOnly": true, "type": "string" }, "source": { "readOnly": true, "enum": [ "triggered", "automated", "customer_provided" ], "type": "string" }, "status": { "readOnly": true, "enum": [ "processing", "success", "failure" ], "type": "string" }, "status_message": { "readOnly": true, "type": "string" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "required": [ "id", "status", "snapshot_location", "account", "site", "is_manual", "is_test", "source", "created_time", "updated_time" ] } }, "type": "object" } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_locations-id-snapshots.md # Get a location's Snapshots. User requires **view** or **manage** permission. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "tags": [ { "name": "Snapshots" } ], "paths": { "/locations/{id}/snapshots": { "get": { "tags": [ "Snapshots" ], "summary": "Get a location's Snapshots.", "description": "User requires **view** or **manage** permission.", "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } }, { "in": "query", "name": "page", "description": "Page number to offset results for pagination. Defaults to 1.", "schema": { "type": "integer" } }, { "in": "query", "name": "per_page", "schema": { "type": "integer" } } ], "responses": { "200": { "description": "An array of Snapshots.", "content": { "application/json": { "schema": { "allOf": [ { "properties": { "count": { "type": "integer" }, "has_more": { "type": "boolean" }, "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total_count": { "type": "integer" } }, "title": "Collection", "type": "object" }, { "properties": { "data": { "items": { "title": "Snapshot", "type": "object", "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_by": { "readOnly": true, "type": "integer" }, "archived_reason": { "type": "string" }, "captured_time": { "description": "ISO 8601 formatted.", "type": "string" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "expiration_time": { "readOnly": true, "type": "string" }, "id": { "readOnly": true, "type": "string" }, "image_path": { "readOnly": true, "type": "string" }, "is_manual": { "readOnly": true, "type": "boolean" }, "is_test": { "type": "boolean" }, "metadata": { "oneOf": [ { "type": "object", "title": "SnapshotWebMetadata", "properties": { "captured_time": { "description": "ISO 8601 formatted.", "type": "string" }, "page_url": { "type": "string" }, "selector": { "type": "string" }, "useragent": { "properties": { "browser": { "properties": { "major": { "type": "string" }, "name": { "type": "string" } }, "type": "object" }, "os": { "properties": { "name": { "type": "string" }, "version": { "type": "string" } }, "type": "object" } }, "type": "object" }, "viewport": { "properties": { "height": { "type": "integer" }, "width": { "type": "integer" } }, "type": "object" } } }, { "type": "object", "title": "SnapshotMobileMetadata", "properties": { "app_name": { "type": "string" }, "app_version": { "type": "string" }, "captured_time": { "type": "string", "description": "ISO 8601 formatted." }, "device_model": { "type": "string" }, "device_os": { "type": "string" }, "resolution": { "type": "string" } } } ], "type": "object" }, "site": { "readOnly": true, "type": "integer" }, "snapshot_download_url": { "readOnly": true, "type": "string" }, "snapshot_location": { "readOnly": true, "type": "string" }, "source": { "readOnly": true, "enum": [ "triggered", "automated", "customer_provided" ], "type": "string" }, "status": { "readOnly": true, "enum": [ "processing", "success", "failure" ], "type": "string" }, "status_message": { "readOnly": true, "type": "string" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "required": [ "id", "status", "snapshot_location", "account", "site", "is_manual", "is_test", "source", "created_time", "updated_time" ] }, "type": "array" } } } ], "type": "object" } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_locations-id.md # Get a Snapshot location. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "tags": [ { "name": "Snapshots" } ], "paths": { "/locations/{id}": { "get": { "summary": "Get a Snapshot location.", "tags": [ "Snapshots" ], "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "A Snapshot location.", "content": { "application/json": { "schema": { "properties": { "data": { "oneOf": [ { "required": [ "platform", "frequency", "published", "published_time", "status", "location_type", "key", "name", "capture_url", "created_time", "updated_time", "created_by", "updated_by", "site", "account", "id" ], "title": "WebLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" } ], "properties": { "capture_attempts": { "type": "integer", "readOnly": true }, "capture_url": { "type": "string" }, "error_message": { "type": "string", "readOnly": true }, "frequency": { "enum": [ "daily", "weekly", "monthly", "never" ], "title": "Frequency", "type": "string" }, "location_type": { "enum": [ "web" ], "title": "LocationTypeWeb", "type": "string" }, "platform": { "enum": [ "desktop", "ios", "android" ], "title": "Platforms", "type": "string" } }, "type": "object" }, { "required": [ "mobile_os", "published", "published_time", "status", "location_type", "key", "name", "application_id", "application_name", "created_by", "updated_by", "site", "account", "created_time", "updated_time", "id" ], "title": "MobileLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" }, { "properties": { "application_id": { "type": "string" }, "application_name": { "type": "string" }, "mobile_os": { "description": "Default 'ios'", "enum": [ "ios", "android" ], "title": "Mobile OS", "type": "string" } } }, { "properties": { "location_type": { "enum": [ "mobile_app" ], "title": "LocationTypeMobile", "type": "string" } } } ], "type": "object" } ], "type": "object" } }, "type": "object" } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_locations.md # Get Snapshot locations Returns an array of Snapshot Locations # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "tags": [ { "name": "Snapshots" } ], "paths": { "/locations": { "get": { "description": "Returns an array of Snapshot Locations", "summary": "Get Snapshot locations", "tags": [ "Snapshots" ], "parameters": [ { "in": "query", "name": "page", "description": "Page number to offset results for pagination. Defaults to 1.", "schema": { "type": "integer" } }, { "in": "query", "name": "per_page", "schema": { "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "object", "allOf": [ { "properties": { "count": { "type": "integer" }, "has_more": { "type": "boolean" }, "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total_count": { "type": "integer" } }, "title": "Collection", "type": "object" }, { "properties": { "data": { "type": "array", "items": { "anyOf": [ { "required": [ "platform", "frequency", "published", "published_time", "status", "location_type", "key", "name", "capture_url", "created_time", "updated_time", "created_by", "updated_by", "site", "account", "id" ], "title": "WebLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" } ], "properties": { "capture_attempts": { "type": "integer", "readOnly": true }, "capture_url": { "type": "string" }, "error_message": { "type": "string", "readOnly": true }, "frequency": { "enum": [ "daily", "weekly", "monthly", "never" ], "title": "Frequency", "type": "string" }, "location_type": { "enum": [ "web" ], "title": "LocationTypeWeb", "type": "string" }, "platform": { "enum": [ "desktop", "ios", "android" ], "title": "Platforms", "type": "string" } }, "type": "object" }, { "required": [ "mobile_os", "published", "published_time", "status", "location_type", "key", "name", "application_id", "application_name", "created_by", "updated_by", "site", "account", "created_time", "updated_time", "id" ], "title": "MobileLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" }, { "properties": { "application_id": { "type": "string" }, "application_name": { "type": "string" }, "mobile_os": { "description": "Default 'ios'", "enum": [ "ios", "android" ], "title": "Mobile OS", "type": "string" } } }, { "properties": { "location_type": { "enum": [ "mobile_app" ], "title": "LocationTypeMobile", "type": "string" } } } ], "type": "object" } ] } } } } ] } } }, "description": "An array of Snapshot locations." }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_sites-site-id-contract.md # List all Contracts in a Site Note: You can also pass a query string parameter `expand=published_version` to return the latest published version details for each Contract within your response. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/sites/{site_id}/contract": { "get": { "summary": "List all Contracts in a Site", "description": "Note: You can also pass a query string parameter `expand=published_version` to return the latest published version details for each Contract within your response.\n", "tags": [ "Sites" ], "parameters": [ { "in": "query", "name": "page", "description": "Page number to offset results for pagination. Defaults to 1.", "schema": { "type": "integer" } }, { "in": "query", "name": "per_page", "schema": { "type": "integer" } }, { "in": "query", "name": "filter", "description": "Filter activities by the various fields. Note the use of 'and' between the fields. Example: `event_type==agreed and signer_id==claddy@ironcladapp.com`.\n", "schema": { "type": "string" } }, { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "query", "name": "sort", "description": "Sort the results of your call by a field in the Request.", "schema": { "type": "string" } }, { "in": "query", "name": "fields", "schema": { "type": "string" } }, { "in": "path", "name": "site_id", "description": "The ID of the Clickwrap Site.", "required": true, "schema": { "type": "integer", "format": "integer" } }, { "in": "query", "name": "includeArchived", "description": "Determine if archived contracts should be included in the result", "schema": { "type": "boolean", "default": false } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "object", "allOf": [ { "properties": { "count": { "type": "integer" }, "has_more": { "type": "boolean" }, "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total_count": { "type": "integer" } }, "title": "Collection", "type": "object" }, { "properties": { "data": { "type": "array", "items": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } } } } ] } } }, "description": "An array of Contracts" }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_sites-site-id-groups.md # List Groups in a Site List Groups in the specified Site # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/sites/{site_id}/groups": { "get": { "summary": "List Groups in a Site", "description": "List Groups in the specified Site", "tags": [ "Sites", "Groups" ], "parameters": [ { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "query", "name": "fields", "schema": { "type": "string" } }, { "in": "query", "name": "filter", "description": "Filter activities by the various fields. Note the use of 'and' between the fields. Example: `event_type==agreed and signer_id==claddy@ironcladapp.com`.\n", "schema": { "type": "string" } }, { "in": "query", "name": "page", "description": "Page number to offset results for pagination. Defaults to 1.", "schema": { "type": "integer" } }, { "in": "query", "name": "per_page", "schema": { "type": "integer" } }, { "in": "query", "name": "sort", "description": "Sort the results of your call by a field in the Request.", "schema": { "type": "string" } }, { "in": "path", "name": "site_id", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "type": "object", "allOf": [ { "properties": { "count": { "type": "integer" }, "has_more": { "type": "boolean" }, "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total_count": { "type": "integer" } }, "title": "Collection", "type": "object" }, { "properties": { "data": { "type": "array", "items": { "title": "Group", "type": "object", "properties": { "id": { "type": "integer", "readOnly": true, "default": 0, "example": 1 }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "paused": { "type": "boolean", "readOnly": true }, "paused_by": { "type": "integer", "readOnly": true, "example": 5 }, "paused_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "pending_changes": { "type": "boolean", "readOnly": true }, "name": { "type": "string", "example": "Login Terms" }, "key": { "type": "string", "example": "group-0rsabrt5a" }, "description": { "type": "string", "example": "This is a description of the Login Terms group." }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other groups.", "items": { "type": "string" } }, "type": { "title": "GroupType", "type": "string", "enum": [ "browsewrap", "clickwrap", "form", "policy" ] }, "style": { "title": "GroupStyle", "type": "string", "enum": [ "floating", "full", "scroll", "checkbox", "combined", "embedded" ] }, "custom_styles": { "type": "string", "description": "Custom CSS styles to apply to the embedded clickwrap group." }, "rendered_by_user": { "type": "boolean" }, "expect_agreed_click": { "type": "boolean" }, "expect_disagreed": { "type": "boolean" }, "container_selector": { "type": "string", "description": "The CSS selector for the group container element." }, "signer_id_selector": { "type": "string", "description": "The CSS selector for the input element containing the signer ID value." }, "form_selector": { "type": "string", "description": "The CSS selector for the form element the group belongs to." }, "block_submission": { "type": "boolean", "default": true }, "force_scroll": { "type": "boolean", "default": false }, "auto_run": { "type": "boolean", "default": true }, "display_all": { "type": "boolean", "default": true }, "alert_message": { "type": "string", "default": "Before you can submit this form, you must accept all of our legal contracts." }, "acceptance_language": { "type": "string", "description": "The language to display alongside the group checkbox." }, "confirmation_email": { "type": "boolean", "default": false }, "hide_record_summary": { "type": "boolean", "default": false }, "opt_out_language": { "type": "string" }, "target_jurisdictions": { "type": "array", "items": { "type": "string" } }, "target_selector": { "type": "string" }, "position": { "title": "BrowsewrapPosition", "type": "string", "enum": [ "auto", "left", "right", "center" ] }, "open_legal_center": { "type": "boolean", "default": true }, "always_visible": { "type": "boolean", "default": false }, "badge_text": { "type": "string", "description": "The text to display on the floating browsewrap badge." }, "instructions": { "type": "string" }, "protected_url": { "type": "boolean" }, "redirect_url": { "type": "string" }, "contracts": { "type": "array", "items": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } }, "validate_unique_classifications": { "type": "array", "items": { "type": "string" } }, "dynamic": { "type": "boolean", "default": false }, "render_data": { "type": "object" }, "notification_email": { "type": "string", "description": "The email address to send internal notifications to when a group is accepted." }, "published_endpoint": { "type": "string", "description": "The URL to the published group.", "readOnly": true }, "snapshots_enabled": { "type": "boolean" }, "snapshot_config": { "type": "string" }, "snapshot": { "title": "GroupSnapshot", "type": "object", "properties": { "image_path": { "type": "string" }, "last_captured_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "latest": { "type": "string" } } }, "snapshot_locations": { "type": "array", "items": { "type": "string" } }, "is_associated_with_location": { "type": "boolean", "readOnly": true }, "download_contracts": { "type": "boolean", "default": false } } } } } } ] } } }, "description": "An array of Groups" }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_sites-site-id-signers-id-signer-id-activity.md # List all Activity by Signer ID List Clickwrap Actions within a Site by Signer ID # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/sites/{site_id}/signers/id:{signer_id}/activity": { "get": { "description": "List Clickwrap Actions within a Site by Signer ID", "summary": "List all Activity by Signer ID", "tags": [ "Sites", "Activity" ], "parameters": [ { "in": "path", "name": "site_id", "required": true, "description": "The Site ID of the Ironclad Clickwrap site.", "schema": { "type": "integer", "format": "integer" } }, { "in": "path", "name": "signer_id", "required": true, "description": "The Signer ID for the Signer you want to retrieve activity.", "schema": { "type": "string" } }, { "in": "query", "name": "page", "description": "Page number to offset results for pagination. Defaults to 1.", "schema": { "type": "integer" } }, { "in": "query", "name": "per_page", "schema": { "type": "integer" } }, { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "query", "name": "filter", "description": "Filter activities by the various fields. Note the use of 'and' between the fields. Example: `event_type==agreed and signer_id==claddy@ironcladapp.com`.\n", "schema": { "type": "string" } } ], "responses": { "200": { "description": "An array of Clickwrap Actions", "content": { "application/json": { "schema": { "allOf": [ { "properties": { "count": { "type": "integer" }, "has_more": { "type": "boolean" }, "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total_count": { "type": "integer" } }, "title": "Collection", "type": "object" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "type": "object", "properties": { "uuid": { "type": "string", "example": "55e0820564a5846a5a0387c4" }, "version": { "type": "string", "example": "55dccf164e10cbd8454d7951" }, "custom_data": { "type": "object" }, "connection_data": { "type": "object", "properties": { "page_title": { "type": "string", "example": "Responsive website template for products" }, "page_url": { "type": "string", "example": "http://localhost/demos/ilawnow/signup.html?__ps-agreements=false" }, "page_domain": { "type": "string", "example": "localhost:8888" }, "page_path": { "type": "string", "example": "/demos/ilawnow/signup.html" }, "page_query": { "type": "string", "example": "foo" }, "hostname": { "type": "string", "example": "response.pactsafe.com" }, "referrer": { "type": "string", "example": "http://localhost:8888/demos/ilawnow/signup.html?__ps-agreements=false" }, "browser_timezone": { "type": "string", "example": "4" }, "browser_locale": { "type": "string", "example": "en-us" }, "user_agent": { "type": "string", "example": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36" }, "device_fingerprint": { "type": "string", "example": "foo" }, "operating_system": { "type": "string", "example": "MacOS" }, "environment": { "type": "string", "example": "desktop" }, "screen_color_depth": { "type": "string", "example": "24-bit" }, "screen_resolution": { "type": "string", "example": "1680x1050" }, "cookies": { "type": "string", "example": "foo" }, "remote_address": { "type": "string", "example": "172.31.43.73" } } }, "site": { "readOnly": true, "type": "integer" }, "account": { "readOnly": true, "type": "integer" }, "signer_id": { "type": "string", "example": "ironclad@example.com" }, "group": { "type": "integer" }, "contract": { "type": "integer" }, "event_type": { "enum": [ "agreed", "disagreed", "displayed" ], "title": "EventType", "type": "string" }, "batch": { "type": "string", "example": "1442324122234" }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "id": { "readOnly": true, "type": "string", "example": "55f81e9a949601b976734da9" } } } } } } ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_sites.md # List all sites # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/sites": { "get": { "summary": "List all sites", "tags": [ "Sites" ], "parameters": [ { "in": "query", "name": "page", "description": "Page number to offset results for pagination. Defaults to 1.", "schema": { "type": "integer" } }, { "in": "query", "name": "per_page", "schema": { "type": "integer" } }, { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "query", "name": "filter", "description": "Filter activities by the various fields. Note the use of 'and' between the fields. Example: `event_type==agreed and signer_id==claddy@ironcladapp.com`.\n", "schema": { "type": "string" } }, { "in": "query", "name": "sort", "description": "Sort the results of your call by a field in the Request.", "schema": { "type": "string" } }, { "in": "query", "name": "fields", "schema": { "type": "string" } }, { "in": "query", "name": "no_count", "schema": { "type": "boolean" } }, { "in": "query", "name": "lean", "schema": { "type": "boolean" } } ], "responses": { "200": { "description": "An array of sites", "content": { "application/json": { "schema": { "type": "object", "allOf": [ { "properties": { "count": { "type": "integer" }, "has_more": { "type": "boolean" }, "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total_count": { "type": "integer" } }, "title": "Collection", "type": "object" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "properties": { "acceptance_language": { "type": "string" }, "access_id": { "example": "f9a33f92-0c74-4803-abb5-bf7159da7a13", "readOnly": true, "type": "string" }, "account": { "example": 1, "readOnly": true, "type": "integer" }, "adoption_level": { "readOnly": true, "enum": [ "laggard", "majority", "early_adopter", "innovator", "ironclad_clickwrap", "ironclad_clickwrap_v2", "internal_sandbox", "growth", "professional", "enterprise", "legal_centers" ], "title": "Adoption Level", "type": "string" }, "approval_order": { "example": false, "type": "boolean" }, "base_publish_url": { "readOnly": true, "type": "string" }, "company_information": { "properties": { "city": { "example": "Indianapolis", "type": "string" }, "country": { "example": "United States", "type": "string" }, "name": { "example": "New Website, LLC", "type": "string" }, "postal_code": { "example": 46205, "type": "integer" }, "state": { "example": "IN", "type": "string" }, "street": { "example": "6311 Westfield Blvd.", "type": "string" } }, "type": "object" }, "created_by": { "example": 1, "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "deleted": { "example": false, "readOnly": true, "type": "boolean" }, "deleted_by": { "example": 1, "readOnly": true, "type": "integer" }, "deleted_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "disabled": { "example": false, "readOnly": true, "type": "boolean" }, "email_allow_override": { "example": false, "type": "boolean" }, "email_display_name": { "example": "New Website", "type": "string" }, "email_reply_address": { "example": "team@pactsafe.com", "type": "string" }, "enable_allowed_domains": { "example": false, "type": "boolean" }, "enforce_limits": { "example": true, "readOnly": true, "type": "boolean" }, "first_acceptance_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "id": { "example": 1, "readOnly": true, "type": "integer" }, "key": { "example": "new-website", "type": "string" }, "legal_center_url": { "readOnly": true, "type": "string" }, "locale": { "example": "en-US", "type": "string" }, "mobile_acceptance_language": { "default": "Agree", "example": "Agree", "type": "string" }, "mobile_friendly": { "example": true, "type": "boolean" }, "name": { "example": "New Website", "type": "string" }, "primary": { "example": false, "readOnly": true, "type": "boolean" }, "require_signer_verification": { "example": false, "type": "boolean" }, "sandbox": { "example": false, "readOnly": true, "type": "boolean" }, "time_zone": { "example": "America/New_York", "type": "string" }, "updated_by": { "example": 1, "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "url": { "example": "http://wwww.newwebsite.com", "type": "string" }, "verified": { "example": true, "readOnly": true, "type": "boolean" }, "verified_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" } }, "type": "object" } } } } ] } } } }, "401": { "description": "The requester is unauthorized." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/get_versions-version-id.md # Retrieve a Version Retrieve a Version by ID # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/versions/{version_id}": { "get": { "summary": "Retrieve a Version", "tags": [ "Versions" ], "parameters": [ { "in": "path", "name": "version_id", "description": "The unique ID of the Contract Version.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "A Version.", "content": { "application/json": { "schema": { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/getting-started-rest-api.md # REST API ## Our REST API ## What is it? Our REST API is a comprehensive set of APIs to connect to Ironclad Clickwrap for things like creating or versioning contracts, updating user information, sending contracts manually, and more. ## When should I use it? Here are some examples for when you'd want to use our API: * You need to retrieve the content of a Contract stored in Ironclad Clickwrap. * You want to send a Contract to an individual for electronic signature. * You want to retrieve or update metadata about a contract like tags, name, or description. * You want to update a user's login details. * You want to retrieve detailed activity for a signer. **Visit one of the links below to get started!** --- # Source: https://clickwrap-developer.ironcladapp.com/docs/getting-started.md # Introduction Hi there! Welcome to the Ironclad Clickwrap Developer Portal. We have a rich set of developer tools to help you integrate into your own environment. > 📘 We are in the process of renaming PactSafe to Ironclad Clickwrap in our developer docs > > You may notice various places in this documentation refer to "PactSafe". Ironclad acquired PactSafe in March 2021 and has renamed the product to be Ironclad Clickwrap. # Orientation ## Why do customers use Ironclad Clickwrap? First designed for billions of terms of service acceptances a year, Ironclad Clickwrap is an API-first system to help you update, embed, track, and accept any type of contract that is native to your digital experience. ## Customers use Ironclad Clickwrap to do things like... Let legal directly update & manage all of their online legal content, like terms, consents, and disclosures\ Automatically capture and report on the evidence needed to authenticate legal terms in a court case, audit, or regulatory inquiry. Dynamically draft and present complicated contracts for acceptance or signature. ## Why do development teams love using Ironclad Clickwrap? Ironclad Clickwrap is the only embedded contracting tool that allows you to fully customize your UX for acceptance, while staying legally compliant & enforceable. Our JS & Activity API components were designed to either allow you to use our UI components or embed quietly using your own. In addition, when embedded contracts are handled in-house, it creates risk and technical debt for businesses. When legal teams are faced with court cases or audits around embedded contracts, developers can be left on the hook to testify to how systems were built unless an external authentication system is used. Tech teams also become the gatekeepers between online terms and the legal team, meaning fixing that typo someone caught can become unplanned work that distracts from core competencies. As you begin to work with Ironclad Clickwrap, you’ll find that our system features three core technical services that work together or independently, depending on your use case - **Clickwrap Groups** for *embedding contracts & tracking acceptance*, **Snapshots** for *automated UX capture, and our legal content management service*. # Core services: ## Clickwrap Groups *(for embedding and tracking acceptance)* *Before you get started with our SDKs or APIs, you'll need to take the following actions in your Ironclad Clickwrap account.* ### Uploading a contract/getting started with our editor Before you can embed a contract into your page, you'll need to upload a contract. [Check out this article to get started](https://support.ironcladapp.com/hc/en-us/articles/13621141941271-Create-and-Manage-Templates). ## Choose between a static or dynamic template For dynamic templates, you'll need to start with setting tokens in your templates. [Get started with dynamic templates](https://support.ironcladapp.com/hc/en-us/articles/12402908815511-Create-Dynamic-Templates) ### Configure your Clickwrap Group Templates can be grouped together for display and acceptance. To define which templates should be used and what the experience should look like, [check out this article](https://support.ironcladapp.com/hc/en-us/articles/13622030976663-Clickwrap-Groups-Overview). ## Acceptance Tracking ### Javascript Library Our JavaScript library allows you to integrate acceptance tracking using Ironclad Clickwrap in your own environment. The JavaScript library utilizes our Activity API, which is a microservice designed for fast and reliable acceptance tracking. Learn more about the JavaScript library on the [JavaScript Library](https://clickwrap-developer.ironcladapp.com/docs/javascript-library-getting-started) page. ### Activity API Our Activity API is a separate API (from our REST API) designed for **sending acceptance** data to the Ironclad Clickwrap platform, checking the acceptance status of a Signer, or retrieving data for creating a Clickwrap experience. Learn more about using our Activity API [here](/docs/activity-api). ### REST API Our REST API—which also powers our web app—can be used to create contracts, retrieve data from the Ironclad Clickwrap platform, or to manage the settings and sites even within your own Ironclad Clickwrap account! For acceptance tracking, gain more customizability and freedom with our REST API. With plenty of power, we also have plenty of documentation—which can be located [here](/docs/getting-started-rest-api). > 🚧 API Key Requirement > > Please note that our REST API **does** require an API key to be used on **all** API calls. ### Our SDKs - Acceptance and/or Contract Management We have several SDKs available to be used. Each SDK will typically only cover acceptance tracking but some newer versions may cover more advanced use cases. Please feel free to peruse our available SDKs on our [GitHub account](https://github.com/pactsafe) to see all of our libraries! ### Re-acceptance and what to do when terms change When terms change and users need to re-accept the new version of the terms, check out this article on [Checking Acceptance on Login](https://clickwrap-developer.ironcladapp.com/docs/prompting-your-user-on-login). ## Snapshots Can be configured using command builder via our dashboard or uploaded directly via the [API for native mobile integrations](https://clickwrap-developer.ironcladapp.com/reference/snapshots). Get started with snapshots by checking out [this article](https://support.ironcladapp.com/hc/en-us/articles/12448605308055-Snapshots-Overview#:~:text=Snapshots%20enable%20you%20to%20keep,with%20manual%20uploads%20if%20necessary.). ## Legal content management You can either set up an Ironclad-hosted legal center directly through our dashboard or pull the content. this link explains how to [Integrating Ironclad Clickwrap with your web content management system](https://clickwrap-developer.ironcladapp.com/page/integrating-pactsafe-with-your-web-content-management-system) --- # Source: https://clickwrap-developer.ironcladapp.com/docs/getting-your-access-token.md # Authentication (REST API) Learn how to authenticate with the REST API by generating and using an access token. In order to access the Ironclad Clickwrap REST API, you’ll need to add an access token as an HTTP authorization header to every API request. Below, you'll find how to create and use an access token for the Ironclad Clickwrap API. > 🚧 Please Review the Important Notes Section > > Please review the "Important Notes" section before beginning to use your access token! ## Create an API Access Token ### Visit Your User Profile Visit your User Profile by clicking on your initials in the bottom left of the page to open the navigation modal and then selecting “User Profile” at the top. {1600} Visit the User Profile page by clicking on the "User Profile" link. ### Create a New API Application Next to the “API Keys” header, click on the plus sign to open the “Register an API Key” modal. {1600} Click on the plus sign to open the modal. With the "Register API Key" modal open, give your API application a name and a description of what you plan to use the access token for. You can then click “Register” to move on to the next step. {1600} "Register API Key" modal open. Once you have clicked "Register", a client secret and access token will be generated and displayed in a modal. Generated keys modal open. Generated keys modal open. Be sure to copy your client secret and access token. These values will not be displayed again and cannot be retrieved after this modal is closed. Alternatively, you can also generate your access token programmatically via the REST API with [this endpoint](https://clickwrap-developer.ironcladapp.com/reference/createregenerate-access-token). ## Using Your Access Token When making a request to the API, you’ll need to add the access token as an Authorization HTTP Header. It should look like the following: ```http HTTP Header Authorization: Bearer YOUR_ACCESS_TOKEN ``` {1600} Example of the access token being used in Postman when manually added as an HTTP header. ## Important Notes ### Access Token and User Permissions The API access token is tied to the user who generated it. This means: 1. Access tokens must be created by a user with the appropriate site permissions. For example, the user associated with an access token must have “create” permissions to create resources via the API. 2. When a user is removed from the site, all existing API tokens will by default be transferred to the site's owner—if one exists. If no site owner exists, the removed user's API tokens will be decommissioned. Consider using a persistent service account to create API tokens. ## Best Practices ### API Requests Must Use HTTPS API requests must only use HTTPS (SSL). Attempting to use without SSL will not succeed and should not be used. ### Secure Your Access Token Please keep your API key secure! Do not use your API key within client-side code. Additionally, do not share them publicly or store them in any git repositories. ### Rotate Your Access Token Since access tokens are generated using OAuth 2.0, you have the ability to rotate your keys at your own discretion via the API. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/global_ps-object.md # Global_ps Object This reference documents the properties and methods available on the global `_ps` object, and details on using the async queue. ## Properties ## \_ps.Sites `Object ` An object used internally by `_ps` to store and reference all of the Site objects. Rather than accessing it directly, you should use one of the methods below, such as `getByName()` or `remove()`. ## \_ps.loaded `Boolean` A boolean flag indicating if ps.js has finished loading and is ready to use. # Methods ## create Creates a new Site object. ```javascript _ps.create(access_id, [name], [options]); ``` ### Arguments | Name | Required | Type | Description | | --- | --- | --- | --- | | access_id | True | String | The unique access_id assigned to your Ironclad Clickwrap Site, which can be found on the [Site Settings](https://beta.pactsafe.com/settings/site) page within Ironclad Clickwrap. | | name | False | String | A name to assign to the Site object. This property is optional for the initial Site, and will default to 's0', but a name must be provided for any additional Sites. | | options | False | Object | An object containing properties to set on the Site. | ### Returns | Type | Description | | --- | --- | | Site | The created Site object. | ### Examples ```javascript // Creates a Site with the default configuration. _ps.create('0207a846-d9bf-4b13-8430-1344e86ff7b1'); ``` ```javascript // Creates a Site named "pactsafe". _ps.create('0207a846-d9bf-4b13-8430-1344e86ff7b1', 'pactsafe'); ``` ```javascript // Creates a Site named "pactsafe", enables localization // and sets the signer_id to "john@pactsafe.com". _ps.create('0207a846-d9bf-4b13-8430-1344e86ff7b1', 'pactsafe', { localized: true, signer_id: 'john@pactsafe.com' }); ``` ```javascript // Creates a Site with the default name and disables sending. _ps.create('0207a846-d9bf-4b13-8430-1344e86ff7b1', null, { disable_sending: true }); ``` ## remove Removes a site Object by name. ```javascript // The name of your Ironclad Clickwrap Site object. const name = 'mySite'; _ps.remove(name); ``` ### Arguments | Name | Required | Type | Description | | --- | --- | --- | --- | | name | True | String | The name of the Site to remove. | ### Returns No Return Value ### Examples ```javascript // Removes the default Site. _ps.remove('s0'); ``` ```javascript // Removes a Site named "pactsafe". _ps.remove('pactsafe'); ``` ## getByName Returns a Site object by name. ```javascript _ps.getByName(name); ``` ### Arguments | Name | Required | Type | Description | | --- | --- | --- | --- | | name | True | String | The name of the Site to return. | ### Returns | Type | Description | | --- | --- | | Site | The Site object. | ### Examples ```javascript // Returns a Site that was given the default name. var site = _ps.getByName('s0'); ``` ## getAll Returns all of the Site objects that have been created. ```javascript _ps.getAll(); ``` ### Arguments No Arguments ### Returns | Type | Description | | --- | --- | | Array | An array containing all of the Site objects. | ### Examples ```javascript // Returns all Sites that have been created. var sites = _ps.getAll(); ``` ## getByKey Returns a Group object by key. ```javascript _ps.getByKey(key); ``` ### Arguments | Name | Required | Type | Description | | --- | --- | --- | --- | | key | True | String | The key of the Group to return. | ### Returns | Type | Description | | --- | --- | | BrowsewrapGroup or ClickwrapGroup | The Group object. | ### Examples ```javascript // Returns a Group with the key "login-contracts". var group = _ps.getByKey('login-contracts'); ``` ## getAllGroups Returns all of the Group objects that have been loaded. ```javascript _ps.getAllGroups(); ``` ### Arguments No Arguments ### Returns | Type | Description | | --- | --- | | Array | An array containing all of the Group objects. | ### Examples ```javascript // Returns all Groups that have been loaded in any Site. var groups = _ps.getAllGroups(); ``` # Event Methods See the Events reference for a list of available events. ## on Listens for an event to be triggered. ```javascript _ps.on(event, callback); ``` ### Arguments | Name | Required | Type | Description | | --- | --- | --- | --- | | event | True | String | The name of the event to listen for. | | callback | True | Function | The callback function to execute when the event is triggered. The arguments that are passed to the function vary between events. | ### Returns No Return Value ### Examples ```javascript // Listens for a Group to be initialized. _ps.on('initialized', function(key, group) { console.log('Group ' + key + ' has been initialized.'); }); ``` ```javascript // Toggles a form submit button when a Group // is either validated or invalidated. _ps.on('valid', function(parameters, group) { $('#submit-button').prop('disabled', false); }); ``` ```javascript _ps.on('invalid', function(parameters, group) { $('#submit-button').prop('disabled', true); }); ``` ```javascript // Logs all events to the browser's console. _ps.on('all', function() { console.log(arguments); }); ``` ## once Listens for an event to be triggered once. The event listener is then removed. ```javascript _ps.once(event, callback); ``` ### Arguments | Name | Required | Type | Description | | --- | --- | --- | --- | | event | True | String | The name of the event to listen for. | | callback | True | Function | The callback function to execute once the event is triggered. The arguments that are passed to the function vary between events. | ### Returns No Return Value ### Examples ```javascript // Submits the form once the contracts have been accepted. _ps.once('valid', function(parameters, group) { $('#login-form').submit(); }); ``` ## off Removes an event listener. ```javascript _ps.off([event], [callback]); ``` ### Arguments | Name | Required | Type | Description | | --- | --- | --- | --- | | event | False | String | The name of the event to remove the listener or listeners from. If blank, all event listeners will be removed from the `_ps` object. | | callback | False | Function | The callback function to remove. If blank, all listeners for the provided event will be removed from the `_ps` object. | ### Returns No Return Value ### Examples ```javascript // Removes a logging handler that was attached to 'error' events. _ps.off('error', logger); ``` ```javascript // Removes all 'sent' event listeners. _ps.off('sent'); ``` ```javascript // Removes all event listeners. _ps.off(); ``` # The Async Queue ## \_ps() The async queue is created by the snippet and available for use even before ps.js has finished downloading. The \_ps object itself serves as the async command queue function. Commands can be used to call any method on a Site or Group object asynchronously, forwarding all arguments directly to the method. The `ps()` function accepts a variety of command formats, which are detailed below. ```javascript _ps([siteName.][groupKey:]method, [arg1, arg2, ..., argN]); ``` ```javascript _ps([siteName.][groupKey:]method, [parameters]); ``` ```javascript _ps(callback); ``` ### Arguments | Name | Required | Type | Description | | --- | --- | --- | --- | | method | True | String | The name of the method to invoke on a Site or Group object. To target methods on the default Site, just provide the name of the method. If you have multiple Sites, you will need to prepend the Site's name to the method, separated by a `.`. To target a Group method, prepend the Group's key, separated by a `:`. | | arg1, arg2, ..., argN | Conditional | Any | The in-line arguments to pass to the method. | | parameters | Conditional | Object | A single object containing parameter name and value pairs. This format is supported by set, send and retrieve commands. | | callback | True | Function | A callback function to execute. All commands in the queue are executed in order, so a callback function can be used to determine when the \_ps object is ready, or when the previous set of commands have been run. | ### Returns No Return Value ### Examples ```javascript // Creates a Site. _ps('create', '0207a846-d9bf-4b13-8430-1344e86ff7b1'); ``` ```javascript // Sends an "agreed" action from the default Site. _ps('send', 'agreed', [ 10, 14 ], [ '5589bf606e7b9c1b1deef447', '5589bf606e7b9c1b1deef450' ], 33); ``` ```javascript // Sends an "agreed" action from a Site named "pactsafe". _ps('pactsafe.send', 'agreed', [ 10, 14 ], [ '5589bf606e7b9c1b1deef447', '5589bf606e7b9c1b1deef450' ], 33); ``` ```javascript // Sends an "agreed" action with a parameters // object and an event callback. _ps('send', 'agreed', { contracts: [ 10, 14 ], versions: [ '5589bf606e7b9c1b1deef447', '5589bf606e7b9c1b1deef450' ], group: 33 event_callback: function() { alert('Action sent.'); } }); ``` ```javascript // Sets the "signer_id" parameter to "john@pactsafe.com". _ps('set', 'signer_id', 'john@pactsafe.com'); ``` ```javascript //Sets the properties of the signer _ps('set', 'custom_data', { first_name: "John", last_name: "Walker", company_name: "PactSafe", title: "Customer Support" }); ``` ```javascript // Loads a Group with the key "login-contracts". _ps('load', 'login-contracts'); ``` ```javascript //Loads a Group with the key "login-contracts" and passes in custom data for the Signer _ps('load','login-contracts', { custom_data: { first_name: "John", last_name: "Walker", company_name: "PactSafe", title: "Customer Support" } }); ``` ```javascript // Sends an "agreed" action for a Group // with the key "login-contracts". _ps('login-contracts:send', 'agreed'); ``` ```javascript // Adds a callback function to the queue. _ps(function() { alert('All commands have been executed.'); }); ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/groupstore-object.md # GroupStore Object This reference documents the properties and methods available on the GroupStore object. # Properties ## GroupStore.loaded `DataObject` A DataObject used to store details about the `load` command. ## GroupStore.initialized `DataObject` A DataObject used to store the initialized Group object. # Methods ## get Returns a Group object by key from the `initialized` property. ```javascript groups.get(key); ``` ### Arguments |NAME|REQUIRED|TYPE|DESCRIPTION| |----|----|----|--------| |`key`|True|String|The key of the Group to return.| ### Returns ||| |----|----| |`GroupObject`|The initialized Group object.| ### Examples ```javascript // Returns a Group with the key "login-contracts". var group = groups.get('login-contracts'); ``` ## add Initializes a new Group object and stores the object in the `initialized` property. ```javascript groups.add(site, key, type, options, callback); ``` ### Arguments |NAME|REQUIRED|TYPE|DESCRIPTION| |----|----|----|--------| |`site`|True|Site|The Site object that the Group belongs to.| |`key`|True|String|The unique key of the Group.| |`type`|True|String|The type of Group object to initialize, `'group'` or `'badge'`, or a constructor function.| |`options`|True|Object|The configuration options and parameters to set on the Group object.| |`callback`|False|Function|A callback function to execute once the Group has been initialized. The function receives two arguments: `error` and `group`.| ### Returns No Return Value ### Examples ```javascript // Initializes a ClickwrapGroup with the key "login-contracts". groups.add(site, 'login-contracts', 'group', config, function(err, group) { if (err) console.error(err); else console.log('Group ' + group.get('key') + ' initialized.'); }); ``` ## getLoading Returns the value stored in the `loaded` property for the given key. ```javascript groups.getLoading(key); ``` ### Arguments |NAME|REQUIRED|TYPE|DESCRIPTION| |----|----|----|--------| |`key`|True|String|The key of the Group to return.| ### Returns ||| |----|--------| |`String, Boolean, Object`|The value stored in the `loaded` property.| ### Examples ```javascript // Returns the details about the load command for "login-contracts". var val = groups.getLoading('login-contracts'); // 'true' ``` ## setLoading Sets the value for a given key on the `loaded` property. ```javascript groups.setLoading(key, value); ``` ### Arguments |NAME|REQUIRED|TYPE|DESCRIPTION| |----|----|----|--------| |`key`|True|String|The key of the Group to return.| |`value`|True|String, Boolean, Object|Details about the `load` command.| ### Returns No Return Value ### Examples ```javascript // Sets the details about the load command for "login-contracts". groups.setLoading('login-contracts', 'contracts-container'); ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/how-to-add-a-clickwrap-group-into-a-marketo-form.md # How to Add a Clickwrap Group into a Marketo Form This step-by-step guide will teach you how to integrate Clickwrap tracking into your Marketo Form. ## Step 1: Configure template(s) and Clickwrap Group Sign up for an Ironclad account to start tracking clickwrap acceptances. Let's navigate to the template tab to add a Terms of Use agreement. Select "Create New" to start a new template. Name your template “Terms of Use” then drag and drop a .docx file of your template. Select "Save" and then press "Publish". ![](https://files.readme.io/dbe7e42-Screen_Shot_2022-08-30_at_9.52.45_AM.png "Screen Shot 2022-08-30 at 9.52.45 AM.png") A Clickwrap Group is a "container" for your contracts - they can contain one, or many contracts that you want to display to an end user. For example, you can pair privacy policy and terms of use together in a Group and track acceptances for both in the same flow. To create a group, navigate to the "Clickwraps" tab. Click on the "Create Clickwrap" and then give your group a name like "MarketoForm" on the top left. Under the templates section, pick the Terms of Use. Press "next" on the top right to configure how the clickwrap will be displayed. Under presentation options, you will be able to preview the different styles available for clickwrap. Select the style you'd like the clickwrap presented in. ![](https://files.readme.io/f5ac558-Screen_Shot_2022-08-30_at_9.54.34_AM.png "Screen Shot 2022-08-30 at 9.54.34 AM.png") After selecting the presentation, adjust the acceptance language to be displayed. ```text I understand and agree to the following {{contracts}}. ``` The placeholder \{\{contracts}} will be replaced with the actual Template titles. After you are finished, press "Publish". ## Step 3: Set up Configuration Snippet Loading clickwrap agreements to your webpage is as simple as copying and pasting a few lines of code. Navigate to "Clickwraps" in the main tabs. Then select "MarketoForm" clickwrap group and click on the "embed" tab to grab the required code. To speed up the setup, IDs can be prepopulated into the snippet. The first input is the HTML Element ID where the contract HTML should be injected to. Fill in "clickwrapContainer" in the first box. The second input is the Signer ID Selector, typically the email or username HTML field ID. Fill in "email" into the box. ![](https://files.readme.io/0bf7160-Screen_Shot_2022-08-30_at_9.56.44_AM.png "Screen Shot 2022-08-30 at 9.56.44 AM.png") These two inputs will automatically be populated into the required code to be pasted into the webpage. Copy the code snippet under "Loading the Clickwrap Group" and paste the code into your header or script section. ## Step 4: Optional Form Validation For many acceptance scenarios, our customers like to ensure their users are accepting the contracts prior to moving on and submitting the form. Here is a simple function that uses methods available on the `_ps` function and associated Site and ClickwrapGroup objects to check the acceptance status of Contracts on a specific ClickwrapGroup. ```javascript JavaScript function contractsAgreed(gKey) { // Check to ensure PactSafe Object exists. if (!_ps) return false; // Check to ensure the Site object exists. if (!_ps.site) return false; // Check to see if a Group exists by a key. if (_ps.site.getByKey(gKey)) { var clickwrapGroup = _ps.site.getByKey(gKey); // We'll use the .block() method since we are // using automatic event sending with the JS Library. var shouldBlockSubmission = clickwrapGroup.block(); // If the .block() method is true, we should prevent the submission // as all contracts within the Group have not been accepted. return !shouldBlockSubmission; } } ``` > A `block` method available on a ClickwrapGroup object tells us whether or not to block the form submission. You can optionally choose to utilize another method `allChecked` in the case you may be sending acceptance manually and would prefer to check that the checkboxes are checked. ## Step 5: Loading Clickwrap on to Your Marketo Form The `MktoForms2` object has a `whenReady` method that is useful for doing additional configuration once the form has been initialized and is ready. Please refer to Marketo's docs for more information on their methods. ```javascript JavaScript // Handle clickwrap loading MktoForms2.whenReady(function(form) { // Load the Group with options. var groupKey = 'example-web-group'; _ps('load', groupKey, { container_selector: 'contracts-container', // Empty div inside form. display_all: true, // True causes the Clickwrap to always show. signer_id_selector: 'Email' // ID of email input field. }); form.onValidate(function() { var agreementsAgreed = contractsAgreed(groupKey); // Check to see if the Clickwrap contracts have been accepted. if (agreementsAgreed) { form.submittable(true); } else { alert('Please review and accept the agreements.'); form.submittable(false); } }); }); ``` ### Loading the Group Within the `whenReady` method, you can then load the ClickwrapGroup Object with the Group Key you've configured within the web app. ### Validating Acceptance Marketo also offers an `onValidate` method that can be used on the Form object. Within here, you can utilize the helper function `contractsAgreed` we previously created to determine whether or not to allow the form to be submittable. In this scenario, unless the user has agreed to the contracts AND acceptance has been sent to the API, we will prevent the form from being submittable and show an error message asking them to accept the agreements. Refer to Marketo's docs on how to appropriately show a form error message as using the Window Alert method is typically not ideal. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/how-to-add-a-terms-of-use-clickwrap-to-a-checkout-page.md # How to Add a Terms of Use to a Checkout Page This step-by-step guide will teach you how to load a Terms of Use Agreement to a checkout page. *Estimated time to complete this guide: ~5 minutes* ## Prerequisites * Webpage with a checkout flow ([Codepen sample page](https://codepen.io/alvinironclad/pen/JjvRqrj)) ## Step 1: Upload a Template Sign up for an Ironclad account to start tracking clickwrap acceptances. Let's navigate to the template tab to add a Terms of Use agreement. Select "Create New" to start a new template. Name your template “Terms of Use” then drag and drop a .docx file of your template. Select "Save" and then press "Publish". ![](https://files.readme.io/dbe7e42-Screen_Shot_2022-08-30_at_9.52.45_AM.png "Screen Shot 2022-08-30 at 9.52.45 AM.png") ## Step 2: Create a Clickwrap Group A Group is a collection of Contracts that is presented to a user. For example, you pair privacy policy and terms of use together in a Group and ask your end users to accept them. To create a group, navigate to the "Clickwraps" tab. Click on the "Create Clickwrap" and then give your group a name like "Checkout" on the top left. Under the templates section, pick the Terms of Use. Press "next" on the top right to configure how the clickwrap will be displayed. Under presentation options, you will be able to preview the different styles available for clickwrap. Select the "Combined checkbox for all Templates". ![](https://files.readme.io/f5ac558-Screen_Shot_2022-08-30_at_9.54.34_AM.png "Screen Shot 2022-08-30 at 9.54.34 AM.png") After selecting the presentation, adjust the acceptance language to be displayed. Here is an example of acceptance language used for checkout flows: ```text By clicking Continue to Checkout I understand that I am agreeing to the {{contracts}} ``` The placeholder \{\{contracts}} will be replaced with the actual Template titles. After you are finished, press "Publish". ## Step 3: Set up Configuration Snippet Loading clickwrap agreements to your webpage is as simple as copying and pasting a few lines of code. Navigate to "Clickwraps" in the main tabs. Then select "Checkout" clickwrap group and click on the "embed" tab to grab the required code. To speed up the setup, IDs can be prepopulated into the snippet. The first input is the HTML Element ID where the contract HTML should be injected to. Fill in "clickwrapContainer" in the first box. The second input is the Signer ID Selector, typically the email or username field ID. Fill in "email" into the box. ![](https://files.readme.io/0bf7160-Screen_Shot_2022-08-30_at_9.56.44_AM.png "Screen Shot 2022-08-30 at 9.56.44 AM.png") These two inputs will automatically be populated into the required code to be pasted into the webpage. Copy the code snippet under "Loading the Clickwrap Group" and paste the code into your header or script section. ## Step 4: Loading Clickwrap to your Webpage When using our JavaScript Library, an acceptance event is created when a user checks the box. This checkout use case will create an acceptance event when a user clicks on a "checkout" button. First, disable the automated acceptance event from the JavaScript snippet. You can adjust this setting when configuring the JavaScript snippet with the property `disable_sending`. The example below shows when creating and configuring your Site object. ```javascript _ps("create", siteAccessId, { //siteAccessId is copied over from the "embed" tab disable_sending: true // Disable automatic sending with the JavaScript snippet. }); ``` Second, configure the button click to send an acceptance event. ```javascript const clickwrapGroupKey = 'CLICKWRAP_GROUP_KEY'; const idOfMultipurposeButton = 'BUTTON_ELEMENT_ID'; // The `id` of your html button element // Wait until the DOM is ready (your implementation may not need to wait for the DOM to be ready) document.addEventListener('DOMContentLoaded', function () { // Locate your multi-purpose buttong and add an event listener document.getElementById(idOfMultipurposeButton).addEventListener('click', function (event) { event.preventDefault(); _ps(clickwrapGroupKey + ':send', 'agreed', { disable_sending: false, event_callback: function(err, eventType, group, request) { if (err) { // Something went wrong with sending the agreed event. alert('Uh oh, something went wrong. Please try submitting again.'); // Alert the user } alert("Thank You for your purchase!"); window.location.reload(); // Superficially reload to reset the example } }); }); }, false); ``` Third, display the clickwrap agreement on the webpage by adding an empty DIV element to the appropriate location within your HTML. This DIV element ID will be connected to the container selector used in the previous step. Add the code below and replace "HTML\_ELEMENT\_ID\_HERE" with the HTML element ID which was "clickwrapContainer". ```html
``` ## Step 5: Pass Signer Information An Acceptance Activity Record is created after a user accepts the clickwrap. This will include information on the acceptance, user, and ability to download a PDF of the record. Additional information on the record can be passed through using 'custom\_data'. This includes user input like name, email, and company name. Also, user input data can be passed to a Signer Record. The Signer Record is a specific profile for a single user that will hold all clickwrap activities. Copy the code below to your sign-up page and replace the ID values for name and email. ```javascript // We're setting custom data when the signer_id is set here. _ps.on('set:signer_id', function(value, context) { setCustomData(); }); function setCustomData() { var fullNameVal = document.getElementById('FULL_NAME_ID').value; var emailAddressVal = document.getElementById('EMAIL_ID').value; // Set custom data that gets sent on acceptance. var customData = { full_name: fullNameVal, email: emailAddressVal }; _ps('set', 'custom_data', customData); } ``` ## Step 6: Hiding Checkbox This checkout page will not require users to check a box to agree to terms. Use CSS to add custom CSS that overrides the default presentation styles. Copy the CSS below to hide the checkbox. ```css input.ps-checkbox[type="checkbox"] { display:none !important; } .ps-checkbox-container { padding-left: 0px !important; } .ps-contract-label { margin-left: 0px !important; } ``` Congrats! You just deployed an agreement to your webpage. To test the process, let's navigate to your checkout page and input your information. Click on "continue to checkout" to test the acceptance. The acceptance will be tracked on the Activity tab. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/how-to-add-a-terms-of-use-clickwrap-to-a-sign-up-page.md # How to Add a Terms of Use Clickwrap to a Sign Up Page This step-by-step guide will teach you how to load a Terms of Use Agreement to a sign-up page. *Estimated time to complete this guide: ~5 minutes* ## Prerequisites * Webpage with a signup flow ([Codepen sample page](https://codepen.io/alvinironclad/pen/vYjXMXP)) ## Step 1: Upload a Template Sign up for an Ironclad account to start tracking clickwrap acceptances. Let's navigate to the template tab to add a Terms of Use agreement. Select "Create New" to start a new template. Name your template “Terms of Use” then drag and drop a .docx file of your template. Select "Save" and then press "Publish". ![](https://files.readme.io/dbe7e42-Screen_Shot_2022-08-30_at_9.52.45_AM.png "Screen Shot 2022-08-30 at 9.52.45 AM.png") ## Step 2: Create a Clickwrap Group A Group is a collection of Contracts that is presented to a user. For example, you pair privacy policy and terms of use together in a Group and ask your end users to accept them. To create a group, navigate to the "Clickwraps" tab. Click on the "Create Clickwrap" and then give your group a name like "Sign Up" on the top left. Under the templates section, pick the Terms of Use. Press "next" on the top right to configure how the clickwrap will be displayed. Under presentation options, you will be able to preview the different styles available for clickwrap. Select the "Combined checkbox for all Templates". After you are finished, press "Publish". ![](https://files.readme.io/f5ac558-Screen_Shot_2022-08-30_at_9.54.34_AM.png "Screen Shot 2022-08-30 at 9.54.34 AM.png") ## Step 3: Set up Configuration Snippet Loading clickwrap agreements to your webpage is as simple as copying and pasting a few lines of code. Navigate to "Clickwraps" in the main tabs. Then select "Sign Up" clickwrap group and click on the "embed" tab to grab the required code. To speed up the setup, IDs can be prepopulated into the snippet. The first input is the HTML Element ID where the contract HTML should be injected to. Fill in "clickwrapContainer" in the first box. The second input is the Signer ID Selector, typically the email or username field ID. Fill in "email" into the box. ![](https://files.readme.io/0bf7160-Screen_Shot_2022-08-30_at_9.56.44_AM.png "Screen Shot 2022-08-30 at 9.56.44 AM.png") These two inputs will automatically be populated into the required code to be pasted into your webpage. Copy the code snippet under "Loading the Clickwrap Group". For additional context, see [developer documentation](https://clickwrap-developer.ironcladapp.com/docs/loading-a-clickwrap-101#ironclad-clickwrap-snippet). ## Step 4: Loading Clickwrap to your Webpage Paste the generated code into the header of the webpage. In order to display the clickwrap agreement on the webpage, add an empty DIV element to the appropriate location within your HTML. This DIV element ID will be connected to the container selector used in the previous step. Add the code below and replace "HTML\_ELEMENT\_ID\_HERE" with the HTML element ID which was "clickwrapContainer". ```html
``` ## Step 5: Pass Signer Information An Acceptance Activity Record is created after a user accepts the clickwrap. This will include information on the acceptance, user, and ability to download a PDF of the record. Additional information on the record can be passed through using 'custom\_data'. This includes user input like name, email, and company name. Also, user input data can be passed to a Signer Record. The Signer Record is a specific profile for a single user that will hold all clickwrap activities. Copy the code below to your sign-up page and replace the value for name and email. ```javascript // We're setting custom data when the signer_id is set here. _ps.on('set:signer_id', function(value, context) { setCustomData(); }); function setCustomData() { var fullNameVal = document.getElementById('FULL_NAME_ID').value; var emailAddressVal = document.getElementById('EMAIL_ID').value; // Set custom data that gets sent on acceptance. var customData = { full_name: fullNameVal, email: emailAddressVal }; _ps('set', 'custom_data', customData); } ``` Congrats! You just deployed an agreement to your webpage. To test the process, let's navigate to your sign-up page and input your information. Check the box for the clickwrap agreement. The acceptance will be tracked on the Activity tab. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/how-to-get-a-download-url-for-a-pdf-record-after-acceptance.md # Get Acceptance Record Download URL # Overview After your Signer accepts your agreements, you may want to provide them with a link to a copy of the agreement. This can be helpful for allowing the user to immediately review the signed copy or for when your workflow is customized. # Requirements To get started, you'll need to have the following: * Ironclad Clickwrap Site Access ID. More info on the [Authentication](https://developer.pactsafe.com/docs/authentication-2) page * A Clickwrap set up and ready to go (refer to [Loading a Clickwrap 101](https://developer.pactsafe.com/docs/loading-a-clickwrap-101) if you haven’t gotten this far) # Retrieving the URL The most simple way of retrieving the URL is by listening for when the `download_url` parameter has been set from the JavaScript library. ## Considerations There are two things to consider when using this method. 1. This parameter may be set more than once. For example, the parameter may be set once the `signer_id` has been set on the group. Once acceptance has been sent (you can monitor via the valid event), the URL provided should allow direct access to the completed agreement. 2. When manually sending acceptance using the JavaScript Library, you may be better off utilizing the `.get('download_url')` method on the Site object once you know acceptance has been sent. ## Example Code > 🚧 Example Only Code > > Please note that the example code is for demonstration purposes only. Your implementation will most likely be different than what is shown here. ```javascript // Within your Ironclad Clickwrap related code, add a listener for the parameter being set _ps.on('set:download_url', function(downloadUrl, siteContext) { console.log('My download URL: ' + downloadUrl); }); ``` # Full Example Code > 🚧 Example Only Code > > Please note that the example code is for demonstration purposes only. Your implementation will most likely be different than what is shown here. ```javascript var siteId = '790d7014-9806-4acc-8b8a-30c4987f3a95'; // The Ironclad Clickwrap Group key for a published group. var groupKey = 'example-web-group'; // The element's ID where we want the clickwrap to show. var clickwrapElementid = 'contracts-container'; // The input field's ID that will be used to pass as the signer id. var signerIdElementId = 'formEmailAddress'; // Create the Ironclad Clickwrap site. _ps('create', siteId, { test_mode: true, // Allows you to clear test data from Ironclad Clickwrap. }); // Optionally, turn on debugging. _ps.debug = false; /** * Load the Ironclad Clickwrap group with the specific Group Key * and any additional options. */ _ps('load', groupKey, { container_selector: clickwrapElementid, display_all: true, signer_id_selector: signerIdElementId }); // As we're developing, we want to know if there's an alert! _ps.on('error', function(message, event_type, context) { alert(message); }); // The download URL value is the first parameter within the callback _ps.on('set:download_url', function(downloadUrl, siteContext) { console.log('My download URL: ' + downloadUrl); }); // Triggered once the contracts have been accepted. _ps.on('valid', function(params, groupContext) { // Enable submit button once contracts have been accepted var submitButton = document.getElementById('submitButton'); if (submitButton) submitButton.disabled = false; }); ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/how-to-use-dynamic-contracts-with-the-javascript-library.md # Dynamically Render Contract Data ## Overview With the Ironclad Clickwrap JavaScript Library, you can inject data to dynamically swap the values of tokens within a Contract or multiple Contacts. This can significantly improve and reduce the number of templates your workflows may need. ## Requirements * A published Group * A published Contract with tokens ## Published Contract with Tokens In this example, we'll use a contract that contains tokens to be populated using the JavaScript SDK. For example, my contract looks like this: ```text Contract with Tokens for Dynamic Rendering First Name: {{first_name}} Last Name: {{last_name}} This contract contains a few tokens, which allows the contract to be dynamic and personalized to the recipient. For example, the following value: {{first_token}} - was populated before being presented. The best part about this? It can all be automated as part of your workflow! Another value populated with a token: {{second_token}} . See—contracts can be fun. Multiple Values Using Tokens Below, you'll see an example of receiving multiple related values and presenting each one as they were passed as part of loading or showing the Group. Separate Items Generated On-demand: {{#each additional_items}} Item Name: {{this.item}} Item Value: ${{this.itemValue}} {{/each}} Dynamic Content Section Depending on whether we pass a token property name "shouldShow", we can render content within the contract dynamically. {{#if shouldShow}}This is my content that should show when I pass a true value to "shouldShow". Otherwise, this content is shown when "shouldShow" is not true.{{/if}} ``` ## JavaScript Implementation > 🚧 Example Code Only > > Please note that the example code is for demonstration purposes only. Your implementation will most likely be different than what is shown here. ### Add the Ironclad Clickwrap JavaScript Library and set up your Site and Group Objects. ```javascript // Minified Clickwrap Snippet (function(w,d,s,c,f,n,t,g,a,b,l){w['PactSafeObject']=n;w[n]=w[n]||function(){(w[n].q=w[n].q||[]).push(arguments)},w[n].on=function(){(w[n].e=w[n].e||[]).push(arguments)},w[n].once=function(){(w[n].eo=w[n].eo||[]).push(arguments)},w[n].off=function(){(w[n].o=w[n].o||[]).push(arguments)},w[n].t=1*new Date(),w[n].l=0;a=d.createElement(s);b=d.getElementsByTagName(s)[0];a.async=1;a.src=c;a.onload=a.onreadystatechange=function(){w[n].l=1};a.onerror=a.onabort=function(){w[n].l=0};b.parentNode.insertBefore(a,b);setTimeout(function(){if(!w[n].l&&!w[n].loaded){w[n].error=1;a=d.createElement(s);a.async=1;a.src=f;a.onload=a.onreadystatechange=function(){w[n].l=1};a.onerror=a.onabort=function(){w[n].l=0};b.parentNode.insertBefore(a,b);l=function(u,e){try{e=d.createElement('img');e.src='https://d3r8bdci515tjv.cloudfront.net/error.gif?t='+w[n].t+'&u='+encodeURIComponent(u);d.getElementsByTagName('body')[0].appendChild(e)}catch(x){}};l(c);setTimeout(function(){if(!w[n].l&&!w[n].loaded){w[n].error=1;if(g&&'function'==typeof g){g.call(this);}l(f)}},t)}},t)})(window,document,'script','https://vault.pactsafe.io/ps.min.js','https://d3l1mqnl5xpsuc.cloudfront.net/ps.min.js','_ps',4000); // We'll need a couple of things to get started from Ironclad Clickwrap. var siteAccessId = "1e8ddd9d-f32c-4dc7-9c13-62095e6d4317"; // A Clickwrap Site Access ID var groupKey = "full-advanced-dynamic"; // A Clickwrap Group Key. // Creates a Site object with the a Clickwrap Site Access ID. _ps("create", siteAccessId, { dynamic: true, // Please ensure this is true when using dynamic contracts. test_mode: true, // Allows you to clear test data from the Ironclad Clickwrap web app. }); // Since we're testing, we can enable debugging // which will log events to console. You'll want to // set this to false in a production environment. _ps.debug = true; // Options set on the CLickwrap Group. var groupOptions = { container_selector: "clickwrapContainer", // ID of where we want the clickwrap to load in the page. display_all: false, // Prevents the group from showing the contract immediately. auto_run: false }; // Load a Clickwrap group into the page _ps("load", groupKey, groupOptions); ``` > 📘 Dynamic Property Needs to be True > > It's important to note that you need to set the `dynamic` property to `true` when creating the Site. ### Adding Clickwrap Triggered Events and Helpers The following is to help to easily grab page elements for validation. Additionally, Ironclad Clickwrap triggered events are set up to handle acceptance, setting the signer id, and if the user unchecks the box. ```javascript // Return the form element in the page when called. function pageFormElement() { return document.getElementById("myPageForm"); } // Return the show contract button when called. function showContractButton() { return document.getElementById("showContractButton"); } // Return the submit button in the page when called. function pageSubmitButton() { return document.getElementById("formSubmitButton"); } // Check if values exist within the form fields. function simpleValidationFormValues() { var firstNameField = document.getElementById("firstNameInput1"); var lastNameField = document.getElementById("lastNameInput1"); return firstNameField !== "" && lastNameField !== ""; } // Call when the group is ready and loaded. _ps.on("initialized", function () { // Setting a fake unique ID as the signer id on the Site Object. var fakeUniqueId = Math.random().toString(36).substring(7); _ps.site.set("signer_id", fakeUniqueId); }); // If there's an error from the Clickwrap snippet, // you may want to prevent submission if needed. _ps.on("error", function (message, event_type, context) { // Handle any errors. console.log(message); }); /** * _ps.on('valid') gets triggered when all contracts within a group * have been accepted. * * Since the user has agreed, we can enable the submit button * if basic form validation also passes. * * Note: if more than one Clickwrap group exists on the page, * you'll want to add additional validation to ensure both groups * are valid if required. */ _ps.on("valid", function (params, context) { console.log("Valid event fired!"); if (simpleValidationFormValues()) { var submitButton = pageSubmitButton(); if (submitButton) submitButton.disabled = false; // Only enable the submit button if found. } }); // Triggered when a user unchecks a checkbox in a Group. _ps.on("invalid", function (params, context) { console.log("Invalid event fired!"); // If a user has disagreed to a contract, // you may want to ensure the submit button is disabled. var submitButton = pageSubmitButton(); if (!submitButton.disabled) submitButton.disabled = true; }); ``` ### Setting Render Data Here, we set render data with values populated by users on the page and data stored in the JavaScript itself. The important piece of getting the contract to retrieve the HTML is the `_ps(groupKey + ":retrieveHTML", renderData)` function which retrieves the HTML but populated with the data. ```javascript /** * When we're ready to retrieve the populated contract, * we can set the render data on the Group Object and * then retrieve the HTML. * * The Object keys are the token names inside the contract * and will be populated with the values we pass. */ function setRenderData() { var firstNameVal = document.getElementById("firstNameInput1").value; var lastNameVal = document.getElementById("lastNameInput1").value; // Render data that we want in the contract but doesn't require // a user to input. var staticRenderData = { first_token: "my first value", second_token: "my second value", shouldShow: true, additional_items: [ { item: "My first item", itemValue: 0.99, }, { item: "My second item", itemValue: 1.99, } ] }; var renderData = { first_name: firstNameVal, last_name: lastNameVal, ...staticRenderData, }; _ps(groupKey + ":retrieveHTML", renderData); } // Here, we'll listen for when the contract HTML is received // before we display the contract. _ps.on("set:contract_html", function (html, group) { // Retrieved was called from retrieving HTML. group.set('display_all', true); group.displayRequired(); }); // Return whether to block the submission or not. function blockSubmission() { // Check to ensure we're able to get the Group successfully. if (_ps.getByKey(groupKey)) { // Return if we should block the submission using the .block() method. return _ps.getByKey(groupKey).block(); } else { // We weren't able to get the group, so blocking form submission may be needed. return true; } } /** * Here, we add some basic form validation and then manually * send acceptance using the JavaScript snippet. We utilize a * callback to wait and ensure acceptance has been sent to Ironclad Clickwrap * before allowing the form to submit. */ function handleFormSubmit(event) { // Prevent the form from automatically submitting without checking Clickwrap acceptance first. event.preventDefault(); // Simple validation to ensure form fields have values. var formFieldsHaveValues = simpleValidationFormValues(); if (!formFieldsHaveValues) { alert("Please ensure all fields are filled out!"); return false; } // Check to ensure that the acceptance is still valid on the // Clickwrap group as a precaution. var shouldBlockSubmission = blockSubmission(); if (shouldBlockSubmission) { // We can get the alert message if set on the group or define our own if it's not. var acceptanceAlertLanguage = _ps.getByKey(groupKey) && _ps.getByKey(groupKey).get("alert_message") ? _ps.getByKey(groupKey).get("alert_message") : "Please accept our Terms and Conditions."; alert(acceptanceAlertLanguage); // Alert the user that the Terms need to be accepted before continuing. return false; // Prevent submission } // We don't need to block the form submission at this point. // Manually send acceptance with the Clickwrap Group. _ps(groupKey + ":send", "agreed", { disable_sending: false, // We have to revert to allow sending with the snippet here. event_callback: function (err, eventType, group, request) { if (err) { // Something went wrong with sending the agreed event. alert("Uh oh, something went wrong. Please try submitting again."); // Alert the user return false; // Prevent form submission due to error. } // Since we had no errors, go ahead and submit the form. var form = pageFormElement(); if (form) form.submit(); // Check we're able to retrieve the form. return true; }, }); } // Handler for when the Show Contract button is clicked. function handleShowContractButton() { var fieldsExist = simpleValidationFormValues(); if (!fieldsExist) alert("Please fill out the required form fields!"); setRenderData(); } // We want to add listeners for validation and handling of render data. function addListeners() { var form = pageFormElement(); // Get the form element. var showContractBtn = showContractButton(); var lastNameInputField = document.getElementById("lastNameInput1"); if (form) { // Add listener for form submissions. form.addEventListener("submit", function (event) { handleFormSubmit(event); }); } if (showContractBtn) { // Handle when show contract button is clicked. showContractBtn.addEventListener("click", function () { handleShowContractButton(); }); } if (lastNameInputField) { // Allow show contract button if second input field changes // and has text in it. lastNameInputField.addEventListener("change", function () { if (lastNameInputField.val != "") showContractBtn.disabled = false; }); } } // Set up validation of Terms before allowing form submission. if (document.readyState === "loading") { // Loading hasn't finished yet document.addEventListener("DOMContentLoaded", addListeners); } else { // `DOMContentLoaded` has already fired addListeners(); } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/integrating-clickwrap-without-psjs.md # Integrating Ironclad Clickwrap without PS.js The guide will cover a server-side setup for accepting clickwraps. In order to send acceptance of contracts completely server-side, you can simply set up 2 API calls with Ironclad Clickwrap to: 1. Get the latest published Version IDs for the Group you're going to be loading on the page. 2. Send acceptance of those Contract Versions after a user accepts them as part of a registration or login flow in your app. ### What you need to get started * You should have familiarity with the [Activity API](https://clickwrap-developer.ironcladapp.com/docs/what-is-the-activity-api) * A working registration flow including a processing back-end in which to send acceptance of terms as part of a login or registration for your app. * A published [Group](https://app.pactsafe.com/groups) in Ironclad Clickwrap's dashboard (which will require *public, published* [Contracts](https://app.pactsafe.com/contracts)) {1236} Here's an example flow for how you'll interact with the Ironclad Clickwrap API to process acceptance. This flow includes use of PS.js to actually load the checkbox and links to the agreements being accepted via click-through. > 👍 Details & code samples on the Activity API > > More details and code samples for interacting with the Activity API can be found in our [Reference here](https://developer.pactsafe.com/v1.1/reference). ## 1. Get the latest published Version IDs for your Group After creating your Group in Ironclad Clickwrap, you'll have a group `key` that you can reference when making a call to Ironclad Clickwrap. This call will give you back the Contract IDs and Version IDs associated with the Contracts you need your users to accept when creating an account. After making your `HTTP GET` to `https://pactsafe.io/published?...` (as specified [here](https://clickwrap-developer.ironcladapp.com/reference/get-the-latest-published-versions-for-a-group-1)), you'll receive the following results: ```json { "282": "592491db0a8eb8133e7a3c5b", "1241": "592494670a8eb8133e7a3c67" } ``` You can then save those values in your form and pass them to the next page for processing acceptance after your user submits their form. We'd recommend saving contract IDs and version IDs as respective hidden `` fields on your page: ```html ... ... ``` ## 2. Send acceptance of those Contract Versions after a user accepts them Once your user submits the form, you can then send acceptance of those contracts & versions through the Activity API. By calling an `HTTP GET` (or `POST`) to `https://pactsafe.io/send` (as specified [here](https://clickwrap-developer.ironcladapp.com/reference/send-contracts-signedaccepted-by-signer)). The response to this call will be a 1x1 web beacon, and is handled asynchronously in Ironclad Clickwrap. ### Additional values you can pass There are some required parameters to pass, but you can also pass additional parameters to reinforce the acceptance record. Below are some additional URL parameters to the `/send` call that you can pass to track things like User Agent and IP Address: * **IP Address:** addr=192.0.0.1 * **Operating System:** os=MacOS * **Environment:** env=desktop * **Screen Color Depth:** scd=24-bit * **Screen Resolution:** res=1280x800 * **Browser Locale:** bl=en-us * **Browser Time Zone:** btz=5 * **Browser User Agent:** bua="Mozilla/5.0 (Macintosh; Intel Mac OS X 10\_15\_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15" * **Page Encoding:** pae=UTF-8 * **Page Path:** pap=/saas/app/register.html * **Page Domain:** pad=neighborino.co * **Page URL:** pau=[https://neighborino.co/saas/app/register.html](https://neighborino.co/saas/app/register.html) * **Page Title:** pat=Angle - Bootstrap Admin Template --- # Source: https://clickwrap-developer.ironcladapp.com/docs/integrating-pactsafe-with-zapier.md # Integrating Ironclad Clickwrap with Zapier > 🚧 This article includes a reference to "Webhooks" in Ironclad Clickwrap. > > Webhooks are a feature of our Expanded and Enterprise Editions. To learn more about editions, [visit our pricing page](https://www.pactsafe.com/pricing). To learn more about Webhooks, check out [Getting Started with Webhooks](https://clickwrap-developer.ironcladapp.com/docs/working-with-pactsafe-webhooks) . Using [Ironclad Clickwrap's Webhooks](https://clickwrap-developer.ironcladapp.com/docs/working-with-pactsafe-webhooks), you can easily connect to middleware systems like Zapier to make integration code-less and friendly to any business user. When a contract for a new customer is signed, we here at Ironclad Clickwrap have one Zap that: 1. uploads the PDF to Salesforce automatically. 2. sends a Slack message to the Sales channel notifying everyone of the win. 3. sends a Slack message to the rep to prompt them to update details in Salesforce. 4. sets the Opportunity to Closed/Won. In this article, we'll walk you through: * how to get your Webhook set up to call Zapier * how to use information in your Contracts to update 3rd party systems * example integrations to get you started ## Create a new Zap to catch a Webhook To get started on plugging Ironclad Clickwrap into any Zap you've got, just create a new Zap and use the App "Webhooks by Zapier". Then use "Catch Hook" and follow the steps below: ![1276](https://files.readme.io/6cfdaa0-Screen_Recording_2017-11-14_at_05.21_PM.gif "Screen Recording 2017-11-14 at 05.21 PM.gif") > 👍 Setup your Zap in Zapier to get your Webhook URL > > 1. Create a new Zap and select "Webhooks by Zapier" as your Trigger. > 2. Select "Catch Hook" > 3. Click "Continue" again (there's no child key) > 4. **Copy the webhook URL to your clipboard!** ## Setting up your Webhook Now, you'll want to set up your Webhook in Ironclad Clickwrap to talk to Zapier. You can get to Webhooks in Ironclad Clickwrap by going to [Settings > Integrations](https://app.pactsafe.com/settings/integrations). **For this example, we're going to set up a Webhooks for when any Signature Request is*complete*.** Click "Add Webhook" in Integrations and that will take you to your configuration screen where you'll paste in the URL you copied to your clipboard from Zapier. Be sure to use HTTP "POST" when setting up your webhook: ![1211](https://files.readme.io/c25ad3f-Screen_Recording_2017-11-14_at_05.32_PM.gif "Screen Recording 2017-11-14 at 05.32 PM.gif") ## Send yourself a Test Request and Sign it To test the Webhook with the data you want to pass from the Contract, you can create a new Signature Request in the Dashboard and select the Contract (or upload a new one) that has the tokens and fields you'd like to send to Zapier. > 📘 Using Tokens and Fields in a Contract > > Want to use data to drive the information inside of your contracts? Learn how to use fields and tokens on our unt\` > > * \`Payme ([https://success.pactsafe.com/en/articles/2425909-tokens-and-fields](https://success.pactsafe.com/en/articles/2425909-tokens-and-fields)). In this example, we've got 4 Tokens and 3 Signer Fields in a contract. The Tokens are: * `Product_Name` * `Total_Amount` * `Payment_Terms` * `Effective_Date` The Signer Fields are: * Billing Contact Name * Billing Contact Email * Payment Type (Credit Card or Invoice) ![1798](https://files.readme.io/a4e219d-Image_2017-11-17_at_3.32.00_PM.png "Image 2017-11-17 at 3.32.00 PM.png") Next step is to send this Request to yourself. After sending, you'll be prompted to sign your own Request. > 🚧 Not sure how to send a Contract through a Signature Request? > > Check out our knowledgebase for a quick overview: > > * [Sending your first Contract](https://success.pactsafe.com/en/articles/2425954-sending-your-first-contract-for-signature) > * [What does the signing process look like to a Signer?](https://success.pactsafe.com/en/articles/2425990-the-signing-process-through-the-signer-s-eyes) ## Go back to Zapier once the contract is signed After you've signed your own test request, you can go back to Zapier and click "OK, I did this" and you should see the green checkbox confirming the Webhook successfully triggered in Zapier: ![1538](https://files.readme.io/2231780-Image_2017-11-17_at_3.50.47_PM.png "Image 2017-11-17 at 3.50.47 PM.png") Now, those 7 Tokens + Fields are passed to Zapier as data that you can use to populate additional actions. For example, we can create a new customer in QuickBooks Online or update the Billing Contact Name and Email in Salesforce. ## Updating fields in Salesforce You can use contract fields or tokens to update Salesforce with important information like Billing Contact when a Contract is signed. Not only that, you can set the Stage of the Opportunity to Closed/Won using a simple mapping of fields from the Ironclad Clickwrap Webhook to Salesforce fields. Here's a quick example of how you can update the Stage of an Opportunity to Closed/Won when a Request is "complete" in Ironclad Clickwrap: ![770](https://files.readme.io/4253738-Screen_Recording_2017-11-20_at_12.54_PM.gif "Screen Recording 2017-11-20 at 12.54 PM.gif") ## Sending a Slack message You can also set up notifications in systems like Slack or HipChat that notify you when contracts are signed. Here's an example message template for sending when a signature request is complete in Ironclad Clickwrap: ```text Contract for {{render_data__Salesforce__account__Name}} sent by {{data__from_name}} has been signed! Total Amount: {{render_data__Salesforce__Amount}} ``` **Note:** You'll need to update the fields above by mapping them from your Webhook in Ironclad Clickwrap. The above will result in a post to your #sales channel that might look like this: ![502](https://files.readme.io/c3ae823-Image_2017-11-20_at_1.12.38_PM.png "Image 2017-11-20 at 1.12.38 PM.png") ## Getting the PDF of a Request from Ironclad Clickwrap (Intermediate) In order to get the PDF of the contract to send to, say Salesforce or Box, you'll need to do an additional action using the "Code by Zapier" app. Why? Because the webhook we send currently does not include the URL of a completed request. This is something we may add in the future, but as of yet there's a super simple workaround. In Zapier, simply add the "Code by Zapier" app and follow these instructions: * Add the app "Code by Zapier" to a step after your Webhook * Select "Run JavaScript" * Paste in the below code into the "Code" section: ```javascript fetch('https://api.pactsafe.com/v1.1/requests/' + inputData.request_id, { method: 'GET', headers: { "Content-type": "application/json", "Authorization": "Bearer " + inputData.access_token } }) .then(function(res) { return res.json(); }).then(function(json) { var output = json; callback(null, output); }) .catch(callback); ``` You'll want to pass Request ID from your Webhook and your [Access Token](https://clickwrap-developer.ironcladapp.com/docs/getting-your-access-token) to the Request, so your final setup for this step should look like this: {766} Use the Request ID from the webhook to populate the Request ID in the "Code by Zapier" action. That will give you a "Download URL" for your PDF that Zapier can use to send to whichever app you choose next! ## Example: Sending the PDF to Salesforce Next, create a Salesforce action using the "Create Attachment" action. You'll be able to map the "Custom Value for Parent ID" to the Object ID of what's populated in Ironclad Clickwrap—which, natively, supports Account ID, Opportunity ID, and/or Contact ID. You'll be able to do a search when mapping your "File" by doing a Search like so... ![792](https://files.readme.io/beb0e5e-Image_2017-11-20_at_12.25.57_PM.png "Image 2017-11-20 at 12.25.57 PM.png") Then you can map your Opportunity ID using the following search: ![770](https://files.readme.io/901eae3-Screen_Recording_2017-11-20_at_12.24_PM.gif "Screen Recording 2017-11-20 at 12.24 PM.gif") > 🚧 Requirements for Salesforce integration like this > > Adding PDFs to Salesforce requires passing an SFID into Ironclad Clickwrap (or uses our native Salesforce integration). In order to send PDFs back to Salesforce, you'll need to have our Salesforce integration setup or you can use `render_data` to populate a Salesforce ID onto your Contract (that's a bit more advanced). ## Testing your integration Once you're done setting the Zap up, you can test it by "Enabling" your Zap and sending yourself a test Request and signing it (see above!). Once you've tested your Zap, you should see the contract uploaded to your Opportunity, Account, or Contact: ![1505](https://files.readme.io/02e9953-Image_2017-11-20_at_12.36.34_PM.png "Image 2017-11-20 at 12.36.34 PM.png") ## Other Use Cases with Zapier That's just one simple use case. Here are some other ways you can use Ironclad Clickwrap Webhooks to connect to other systems within your business: * Update fields in an Opportunity (like setting Stage to Closed/Won or adding Billing Contact information from "fields" in a Request) * Send a Slack notification with the Request name and other fields inside the Request * Add a customer and invoice in QuickBooks Online after a contract is signed based on deal amount * Send a message through Intercom to thank your customer for signing (Advanced) Questions? Give us a shout at [support@ironcladhq.com](mailto:support@ironcladhq.com). --- # Source: https://clickwrap-developer.ironcladapp.com/docs/integrating-your-own-email-or-sms-provider.md # Integrating your own email or SMS provider Don't want to use our emails or SMS messages? Simply set up a new integration to configure using your own. In this article we'll share how to set up integrations to your own SMS and email providers. You'll learn how to: 1. Catch a "Request Sent" webhook when a signature request is sent to your signer. 2. Learn how to process the webhook in order to include the right information in your email or SMS message. ## What you'll need to get started To get started with this guide, you'll need the following: * API access * Access and knowledge on setting up [Webhooks](https://developer.pactsafe.com/docs/working-with-pactsafe-webhooks) * A service or functioning endpoint for Ironclad Clickwrap Webhooks to reach out to (AWS' Lambda is great for things like this) ## Primary data flows for integration There are three primary data flows to consider when building your own integration to an email or SMS provider: 1. Catch a webhook when signature requests are **sent** to your signer 2. Catch a webhook when a signature request is **signed** by a signer 3. Catch a webhook when a signature request is **completed** by *all* parties > 📘 Note: Reminders aren't scoped for this integration > > Ironclad Clickwrap sends reminders when a signer hasn't signed after 3, 7, and 14 days. If you'd like to setup reminders, you'll also want to set up a recurring job that uses these reminders. Currently, there is no "Request Reminder" webhook but this is something we'll consider for the roadmap. ### Getting started You'll first want to set up a webhook with 3 events enabled: "Request Sent", "Request Signed", and "Request Complete". Click here to go to your [Integrations](https://app.pactsafe.com/settings/integrations), add a "Webhook", and follow the instructions [here](https://developer.pactsafe.com/docs/working-with-pactsafe-webhooks) for more detail. Next, you will want to build a dedicated service to catch webhooks fired by Ironclad Clickwrap in your own service and then handle accordingly. > 🚧 Note: What if the webhooks fails to reach my own web service? > > Failed webhook events **will** retry on a regular cadence for up to 24 hours should any failures occur. ### 1. Catch a webhook when signature requests are sent to your signer If you're using the REST API to process signature requests in Ironclad Clickwrap, you're likely calling a POST to `/requests/:request_id/send` to deliver the finalized signature request to your signer(s). Upon doing this, Ironclad Clickwrap will trigger a webhook called "Request Sent" to any webhooks currently configured on the account. Below are the 4 steps to your integration to deliver the SMS or email from your own provider.

Step

Description

  1. Catch "Request Sent" webhook

An example of this webhook can be found here.

  1. Make HTTP GET request

The below properties within the request are what you'll need for the next step:

``` GET => /v1.1/requests/:request_id { "signers": [ { "send_to": { "email": true, "mobile_number": true }, "signer": { "email": "info@pactsafe.com", "mobile_number": "+13175551234" }, "request_url": "..." } ] } ```
  1. Shorten Signing URL

Next, you can take the signing URL (the request\_url property) for your signer and shorten it using an API like Bit.ly or Rebrandly.

  1. Send SMS or email
Once you've shortened the link, you can trigger the email or SMS to your own provider passing in the mobile number or email address, signing URL, and other metadata that you may want to leverage from Ironclad Clickwrap.Example SMS:\ You've been sent "PS Employment Agreement" by Ironclad Clickwrap. Please review & sign: [https://bit.ly/2131NDa](https://bit.ly/2131NDa)
### 2. Catch a webhook when signature requests are signed by one of your signers If you have more than one signer, you'll want to keep track of individual signers completing as they sign. Ironclad Clickwrap will trigger a webhook called "Request Signed" to any webhooks currently configured on the account every time any signer signs a signature request. > 📘 Note: If you only have one signer > > If you only have one signer on your signature request, Ironclad Clickwrap will send both a "Request Signed" and "Request Complete" (asynchronously, so not necessarily in order) for the final signature on the signature request. Below are the steps to follow when a signature request is signed.
Step Description
**1. Catch "Request Signed" webhook** An example of this webhook can be [found here](https://developer.pactsafe.com/docs/working-with-pactsafe-webhooks#section-request-signed).
**2. Make HTTP GET request** The below properties within the request are what you'll need for the next step:\`\`\`\ GET => /v1.1/requests/:request\_id \{\ "signers": Sent" webhook when a signature request is sent to your signer. 2\. Learn how to process the webhook in order to include the right information in your email or SMS message. ## What you'll need to get started To get started wit\ } ``` ```
**3. Send SMS or email** You can update signers via email or SMS that others have signed the request or update the status in your system.Example SMS:\ Eric Smith has signed "Employment Agreement". One more signature is needed to complete the document.
### 2. Catch a webhook when signature requests are completed by all signers When the signature request is complete, you'll want to notify all signers via email or SMS with a link to review and download the signature request PDF. Ironclad Clickwrap will trigger a webhook called "Request Complete" to any webhooks currently configured on the account every time a signature request is completed. Below are the steps to follow when a signature request is completed:
Step Description
**1. Catch "Request Completed" webhook** An example of this webhook can be [found here](https://developer.pactsafe.com/docs/working-with-pactsafe-webhooks#section-request-complete).
**2. Make HTTP GET request** The below properties within the request are what you'll need for the next step:\`\`\`\ GET => /v1.1/requests/:request\_id \{\ "signers": Sent" webhook when a signature request is sent to your signer. 2\. Learn how to process the webhook in order to include the right information in your email or SMS message. ## What you'll need to get started To get started wit\ } ``` ```
**3. Shorten Signing URL** Next, you can take the signing URL (the `request_url` property) for your signer and shorten it using an API like Bit.ly or [Rebrandly](https://www.rebrandly.com).
**4. Send SMS or email** Once you've shortened the link for each signer that's on the signature request, you can loop through each signer and trigger the email or SMS through your own provider passing in the mobile number or email address, shortened signing URL, and other metadata that you may want to leverage from PactSafe.Example SMS:\ "PS Employment Agreement" has been accepted by all parties. Download your document here: [https://bit.ly/2131NDa](https://bit.ly/2131NDa)
--- # Source: https://clickwrap-developer.ironcladapp.com/docs/ios-sdk.md # iOS SDK # iOS SDK Fork it at [https://github.com/pactsafe/pactsafe-ios-sdk](https://github.com/pactsafe/pactsafe-ios-sdk) # iOS SDK * [Requirements](#requirements) * [Installation](#installation) * [Notes Before Getting Started](#notes-before-getting-started) * [Configure and Initalize the PactSafe SDK](#configure-and-initalize-the-pactsafe-sdk) * [PSClickWrapView](#psclickwrapview) * [Preloading Clickwrap Data](#preloading-clickwrap-data) * [Loading Your Clickwrap](#loading-your-clickwrap) * [Interface Builder](#interface-builder) * [Programmatically](#programmatically) * [Configure Contracts Link Tap Behavior](#configure-contracts-link-tap-behavior) * [Check if Checkbox is Selected](#check-if-checkbox-is-selected) * [Sending Acceptance](#sending-acceptance) * [Checking Acceptance](#checking-acceptance) * [Using the signedStatus Method](#using-the-signedstatus-method) * [Using the PSAcceptanceViewController](#using-the-psacceptanceviewcontroller) * [Using signedStatus Method and Present Alert](#using-signedstatus-method-and-present-alert) * [Sending Activity Manually](#sending-activity-manually) * [Customizing Acceptance Data](#customizing-acceptance-data) * [Connection Data](#connection-data) * [Custom Data](#custom-data) ## Requirements * Xcode 11 or higher * Target iOS 10.0 or higher * Swift 5.0+ * PactSafe Published Contracts in Public Group * PactSafe Group Key * PactSafe Site Access ID * PactSafe API Access ## Installation ### Swift Package Manager You can use the [Swift Package Manager](https://swift.org/package-manager/) to install the PactSafe SDK: [https://github.com/pactsafe/pactsafe-ios-sdk.git](https://github.com/pactsafe/pactsafe-ios-sdk.git) ### CocoaPods You can use [CocoaPods](http://cocoapods.org/) to install the PactSafe SDK by adding it to your Podfile: ```swift platform :ios, '10.0' use_frameworks! target 'MyApp' do pod 'PactSafe', '~> 1.0.1' end ``` ### Carthage You can use [Carthage](https://github.com/Carthage/Carthage) to install the PactSafe SDK by adding it to your Cartfile: ```swift github "pactSafe/pactsafe-ios-sdk" ~> 1.0.1 ``` ### GitHub Use the [GitHub repo](https://github.com/pactsafe/pactsafe-ios-sdk) to download the entire framework manually. ## Notes Before Getting Started ### Demo iOS App As you follow along in this guide, you may want to look at the PactSafe iOS Demo App as an example. You can pull down the [demo app here in GitHub](https://github.com/pactsafe/pactsafe-ios-sdk-demo). ### Debug Mode Something not quite working the way you expect or you need additional information as to what might not be working? Simply enable the `debugMode` property on `PSApp.shared` to print additional information. ```swift PSApp.shared.debugMode = true ``` ### Test Mode Optionally, set `testMode` to true as you are testing your implementation. This allows you to delete test data in your PactSafe site. Note: Don't forget to remove this line before you are finished! ```swift PSApp.shared.testMode = true ``` ### Data Types Before you start to implement, you will want to become familiar with a few data types used by the iOS SDK. | Name | Description | | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | PSSignerID | `PSSignerID` is a typealias for String. | | PSSigner | `PSSigner` is a structure that you'll use to send over your signer information. You must include a signer ID (`PSSignerID`) when needing to send data to PactSafe. You can optionally pass over additional custom data with a `PSCustomData` struct, which is covered below. | | PSCustomData | `PSCustomData` is a structure that holds additional information about the activity. Please see the properties that are available to be set in the [Customizing Acceptance Data](#customizing-acceptance-data) section. | | PSGroup | `PSGroup` is a structure that holds information about a speciifc group (uses PactSafe group key) that is loaded from the PactSafe API. | | PSContract | `PSContract` is a structure that holds information about contracts within a PactSafe group (`PSGroup`). | | PSConnectionData | The `PSConnectionData` structure holds information about the current connection [Customizing Acceptance Data](#customizing-acceptance-data) section. | ## Configure and Initalize the PactSafe SDK In order to use the PactSafe SDK, you’ll need to import PactSafe into your UIApplicationDelegate: ```swift import PactSafe ``` Using the SDK also requires authentication, which you’ll want to set up in your `application:didFinishLaunchingWithOptions` delegate. Note: You **must** configure your PactSafe Site Access ID before using the PSApp shared instance! ```swift PSApp.shared.configure(siteAccessId: "yourSiteAccessId") ``` ## PSClickWrapView The easiest way of getting started with using the PactSafe clickwrap is by utilizing our PSClickWrapView class to dynamically load your contracts into a UIView. The PSClickWrapView class conforms to the UIView class, which allows you to easily customize and format the clickwrap as needed. ### Preloading Clickwrap Data Since your `PSClickWrapView` class will load contracts for the specified PactSafe group, you may want to preload the data using your group key before displaying the clickwrap. By preloading, a user will be less likely see loading when they get to the screen that contains the PSClickWrapView. To preload your PactSafe group data, you can use the `preload` method on the PSApp shared instance within your AppDelegate. Example below: ```swift // Do this after you configure your PSApp shared instance! PSApp.shared.preload(withGroupKey: "example-pactsafe-group-key") ``` By using the `preload` method, the data is stored using the iOS URLCache class in memory only. ### Loading Your Clickwrap The PSClickWrapView class is built on top of a UIView, which gives you flexibility in your implementation. You can implement in the following ways: * **Interface Builder** - add the custom class to a UIView within your storyboard that will load your PactSafe clickwrap. * **Programmatically** - programmatically gives you the most flexibility implementing the PactSafe clickwrap into your project. #### Interface Builder With an empty view in your storyboard, simply subclass the UIView with the PSClickWrapView class. Once you subclass the UIView, you’ll need to do some configuring of the ClickWrap within your view controller. *Note: Don't forget to import PactSafe into your view controller.* ##### IBOutlet your Clickwrap Make sure to create an IBOutlet to your PSClickWrapView UIView in order to customize it. ##### Loads Contracts Into Your Clickwrap In order to get contracts to load into your clickwrap, you’ll need to use the `loadContracts` method, where you'll pass in your PactSafe group key. ```swift override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) myClickWrap.loadContracts(withGroupKey: "example-mobile-app-group") } ``` Once loaded, your clickwrap might look something like this: ![Example Loaded Clickwrap](Additional%20Documentation/images/clickwrap-loaded-example.png) #### Programmatically To use the `PSClickWrapView` class programmatically, you can use the default initializer that accept a frame with a `CGRect` size as you normally would while using UIView. ```swift // Example of what might be in your UIViewController. private var clickWrap: PSClickWrapView? override func viewDidLoad() { super.viewDidLoad() configureClickWrap() } private func configureClickwrap() { clickWrap = PSClickWrapView(frame: CGRect.zero) guard let clickWrap = clickWrap else { return } clickWrap.loadContracts(withGroupKey: "your-group-key") // Insert your PSClickWrapView and do any additional setup. } ``` #### Configure Contracts Link Tap Behavior The `PSClickWrapView` loads the text and links into a `UITextView`, which gives you flexibility for customizing link tap behavior. By default, `UITextView` will take users out of your app and into Safari. If you'd rather keep users in your app, you can use a `UITextViewDelegate` to adjust the default behavior. ##### Import Safari Services Within the view controller where you configured your clickwrap, you’ll need to import SafariServices. ```swift import SafariServices ``` ##### Configure PSClickWrapView UITextView Delegate The PSClickWrapView contains a property `textView` that exposes the UITextView that holds your acceptance language and links to your terms. ```swift // Assign the delegate to your view controller myClickWrap.textView.delegate = self ``` ##### Implement UITextViewDegate Protocol and Method Having assigned the delegate to your ViewController, you’ll need to add the UITextViewDelegate to your ViewController and use the `shouldInteractWith URL` method. ```swift extension MyViewController: UITextViewDelegate { func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { let safariVc = SFSafariViewController(url: URL) present(safariVc, animated: true, completion: nil) return false } } ``` #### Check if Checkbox is Selected Before letting a user submit the form, you may want to make sure that the checkbox is selected. To do so, you can monitor the value of the checkbox when you configure your clickwrap. ```swift // Can be used after you load your clickwrap (e.g., after you call loadContracts). myClickWrap.checkbox.valueChanged = { (isChecked) in // If checked, enable (true) your UIButton submit button otherwise ensure it's disabled (false). You may want to also adjust the style of your button here as well. if isChecked { self.yourSubmitButton.isEnabled = true } else { self.yourSubmitButton.isEnabled = false } } ``` #### Sending Acceptance When using `PSClickWrapView`, you can easily send an "agreed" event once they have accepted your contracts. To do this, you'll pass along a `PSSigner` to the `sendAgreed` method on your `PSClickWrapView` class. ```swift /// PSClickWrapView has a method 'sendAgreed' that allows you to easily send acceptance using a signer id and any custom data. let signer = PSSigner(signerId: signerId, customData: customData) myClickWrap.sendAgreed(signer: signer) { (response, error) in if error == nil { // Use PSCustomData to send additional data about the activity var customData = PSCustomData() customData.firstName = firstNameText customData.lastName = lastNameText // Create the signer with the specified id and custom data. let signer = PSSigner(signerId: emailAddressText, customData: customData) // Use the sendAgreed method on the clickwrap to send acceptance. self.pactSafeClickWrap.sendAgreed(signer: signer) { (error) in if error == nil { // Handle next step } else { // Handle error } } } else { // Handle error } } ``` #### PSClickWrapViewDelegate You can optionally use the `PSClickWrapViewDelegate` protocol to receive events for your `PSClickWrapView`. The following methods are available to be used: | Method Definition | Description | Optional | | ------------------------------------------------- | ---------------------------------------------------------- | -------- | | `clickWrapRendered(withGroup groupData: PSGroup)` | Triggered when a group has loaded and provides group data. | No | | `errorLoadingGroup(error: Error?)` | Triggered when there's an error loading the group data. | Yes | ## Checking Acceptance We provide a few of ways checking acceptance and optionally presenting information if major version changes have been published. The following are three potential options you may choose to use: * Using the signedStatus method * Using a PSAcceptanceViewController * Using signedStatus Method and Present Alert ### Using the signedStatus Method The `signedStatus` method gives you the opportuntiy to check on the status of acceptance within a specific PactSafe group. ```swift let signerId = "test@pactafe.com" let psGroupKey = "example-group-key" // The signedStatus method will return a boolean of whether the specified signer id has accepted all contracts within the group key. If they do need to accept a more recent version, the IDs of contracts will be returned in an array [String]. ps.signedStatus(for: signerId, groupKey: psGroupKey) { (needsAcceptance, contractIds) in if needsAcceptance { // Handle showing acceptance needed. } else { self.segueHome() } } ``` ### Using the PSAcceptanceViewController You can optionally choose to utilize the `PSAcceptanceViewController` in order to conveniently present to your users which contracts had major changes, what the changes were (if change summary is provided within PactSafe), and an opportunity to accept them. #### What it Looks Like We provide a simple implementation that can be easily customized to incorporate your brand styling. More on styling later in the documentation. ![Example PSAcceptanceViewController](Additional%20Documentation/images/psacceptanceviewcontroller-example.png "PSAcceptanceViewController") #### Setting It Up ```swift // Set up your PSApp.shared instance for use. let ps = PSApp.shared // Set the PactSafe group key you plan to check. let groupKey: String = "my-pactsafe-group-key" /** * Use the signedStatus method to get acceptance information. * You'll pass in the signer id that you want to check for and your group key. * The method will return whether any acceptance is needed and the contract ids that need acceptance. */ ps.signedStatus(for: signerId, in: groupKey) { (needsAcceptance, contractIds) in if needsAcceptance { // Call the PSAcceptanceViewController with the group key, signer id, and contract ids that need to be accepted. let psAcceptanceVc = PSAcceptanceViewController(groupKey, signerId, contractIds) // Since PSAcceptanceViewController conforms to UIViewController, you can configure your presentation. psAcceptanceVc.modalPresentationStyle = .automatic psAcceptanceVc.modalTransitionStyle = .coverVertical self.present(psAcceptanceVc, animated: true, completion: nil) } else { // No acceptance is needed, so move them to where they should go. self.segueToHome() } } ``` #### PSAcceptanceViewControllerDelegate You can use the `PSAcceptanceViewControllerDelegate` to receive events associated with the `PSAcceptanceViewController`. Available methods when you adopt to the protocol: | Method Definition | Description | Optional | | --------------------------------------- | ------------------------------------------------------------------------------------- | -------- | | `receivedAcceptance()` | Triggered when a successful submission of acceptance has been sent. | Yes | | `errorSendingAcceptance(error: Error?)` | Triggered when there's an issue with sending acceptance. | Yes | | `checkboxIsSelected(_ checked: Bool)` | Triggered when the checkbox is checked or unchecked. | Yes | | `errorLoadingGroup(error: Error?)` | Triggered when there's an error loading the PactSafe group for the `PSClickWrapView`. | Yes | ##### Receive Notice of Acceptance You'll probably want to know if the user checked the box and then clicked submit. You'll need to adopt a `PSAcceptanceViewControllerDelegate` protocol to your ViewController and implement the `receivedAcceptance` method to know acceptance was received. Implementation may look something like this: ```swift extension MyViewController: PSAcceptanceViewControllerDelegate { func receivedAcceptance() { // Take your action here loginUser() } } ``` ### Using signedStatus Method and Present Alert You may want a more simple approach of presenting that acceptance is needed or need greater customization. To get details around acceptance status, we provide two methods `signedStatus` and `loadGroup` that help you get the appropriate information for displaying to a user. ```swift /// Get the status for a specific signer in a group. ps.signedStatus(for: signerId, groupKey: groupKey) { (needsAcceptance, contractIds) in if needsAcceptance { self.showContractUpdates(forSignerId: signerId, password: passwordText) } else { // Handle next step } } private func showContractUpdates(forSignerId signerId: String, password passwordText: String, filterContractIds: [String]? = nil) { self.ps.loadGroup(groupKey: self.groupKey) { (groupData, error) in guard let groupData = groupData, let contractsData = groupData.contractData else { return } self.psGroupData = groupData var titlesOfContracts = [String]() var updatedContractsMessage: String = "We've updated the following: " if let cidsFilter = filterContractIds { contractsData.forEach { (key, value) in if cidsFilter.contains(key) { titlesOfContracts.append(value.title) } } } else { contractsData.forEach { (key, value) in titlesOfContracts.append(value.title) } } let contractTitles = titlesOfContracts.map { String($0) }.joined(separator: " and ") updatedContractsMessage.append(contractTitles) updatedContractsMessage.append(".\n \n Please agree to these changes.") let alert = self.updatedTermsAlert("Updated Terms", message: updatedContractsMessage, email: signerId, password: passwordText) self.present(alert, animated: true, completion: nil) } } } ``` By getting these details and using a UIAlertController, you could show an alert for the user that there have been updated terms and provide them a few available actions. ![Example UIAlert](Additional%20Documentation/images/login-with-alert.png "UIAlert") ## Sending Activity Manually There may be times when you need to send an activity event manually. Doing so just requires using the `sendActivity` method on your PactSafe shared instance. Here's an example method that would allow you to send acceptance: ```swift func send(for signer: PSSigner) { PSApp.shared.sendActivity(.agreed, signer: signer, group: groupData) { (error) in if error !== nil { print("Error sending acceptance.") } } } ``` ## Customizing Acceptance Data By default, when you send an activity event with the SDK, some additional information about the device will be sent to PactSafe. There are two parts of data that will be sent as part of the activity event, which you may want to reference as you are implementing the SDK. * Connection Data * Custom Data ### Connection Data Below, you'll find information on what to expect the SDK to send over as part of the activity event as "Connection Data", which is viewable within a PactSafe activity record. Many of the properties are set upon initialization except the optional properties (marked optional below) and use the following Apple APIs: `UIDevice`, `Locale`, and `TimeZone`. If you need further information about these properties, please reach out to us directly. | Property | Description | Overridable | | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | | `clientLibrary` | The client library name being used that is sent as part of the activity. | No | | `clientVersion` | The client library version being used that is sent as part of the activity. | No | | `deviceFingerprint` | The unique identifier that is unique and usable to this device. | No | | `environment` | The mobile device category being used (e.g,. tablet or mobile). | No | | `operatingSystem` | The operating system and version of the device. | No | | `screenResolution` | The screen resolution of the device. | No | | `browserLocale` | The current locale identifier of the device. | Yes | | `browserTimezone` | The current time zone identifier of the device. | Yes | | `pageDomain` (Optional) | The domain of the page being viewed. *Note: This is normally for web pages but is available to be populated if needed.* | Yes | | `pagePath` (Optional) | The path of the page being viewed. *Note: This is normally for web pages but is available to be populated if needed.* | Yes | | `pageQuery` (Optional) | The query path on the page being viewed. *Note: This is normally for web pages but is available to be populated if needed.* | Yes | | `pageTitle` (Optional) | The title of the page being viewed. *Note: This is normally for web pages but is available to be populated if you'd like to use the title of the screen where the PactSafe activity is occurring.* | Yes | | `pageUrl` (Optional) | The URL of the page being viewed. Note: This is normally for web pages but is available to be populated if needed. | Yes | | `referrer` (Optional) | The referred of the page being viewed. *Note: This is normally for web pages but is avaialble to be populated if needed.* | Yes | ### Custom Data Custom Data can hold additional information that you'd like to pass over that will be appended to the activity event. By adding Custom Data to the event, you'll be able to search and filter within the PactSafe web app, which is especially beneficial when you have many activity events. Before sending an activity event, you may want to customize properties on `PSCustomData` that can be set. Please note that properties such as `firstName`, `lastName`, `companyName`, and `title` that are reserved properties on `PSCustomData` for PactSafe platform usage only (e.g., seeing the name of an individual within the PactSafe app) but can be set by you. | Property | Description | Overridable | | ------------- | ------------------------------------------------------------------------------- | ----------- | | `firstName` | First Name is a reserved property for custom data in PactSafe but can be set. | Yes | | `lastName` | Last Name is a reserved property for custom data in PactSafe but can be set. | Yes | | `companyName` | Company Name is a reserved property for custom data in PactSafe but can be set. | Yes | | `title` | Title is a reserved property for custom data in PactSafe but can be set. | Yes | #### Adding Additional Custom Data When you need to add your own custom data properties and values, you can easily do so by utilizing the `add(withKey key: String, value: Any)` method on `PSCustomData`, which accepts a key as a `String `and value of `Any`. Example adding your own custom data: ```swift var customData = PSCustomData() customData.firstName = firstNameText customData.lastName = lastNameText customData.add(withKey: "myCustomKey", value: "myCustomValue") customData.add(withKey: "mySecondCustomKey", value: "mySecondCustomValue") ``` You can also remove a previously add key and value by using the method `remove(forKey key: String)`, which removes the value based on the key you previously used. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/java-sdk.md # Java SDK # pactsafe-java-sdk A Java client for the [Ironclad Clickwrap](https://ironcladapp.com/product/clickwrap/) Activity API. Integrate into any application for secure legal record-keeping. Fork it at [https://github.com/pactsafe/pactsafe-java-sdk](https://github.com/pactsafe/pactsafe-java-sdk) ## Initialization ```java com.pactsafe pactsafe-java-sdk {Latest} ``` *Coming soon to maven-central.* ## Initialization Initialize the Activity client, passing your PactSafe Site's `access_id` String as the first argument. ```java Activity site = new Activity("ACCESS_KEY"); ``` ## Configuration The second argument to the `Activity` constructor is an optional `ParameterStore` object of properties for the Activity client. ```java ParameterStore parameters = new ParameterStore(); parameters.setTestMode(true); Activity site = new Activity("ACCESS_KEY", parameters); ``` The third argument is an optional `ActivityOptions` object of client configuration settings. ```java ActivityOptions options = new ActivityOptions(); options.setHost("http://localhost:3000"); Activity site = new Activity("ACCESS_KEY", parameters, options); ``` ## Parameters Every Action sent to the PactSafe Activity API is built from the parameters stored on the Activity client. These parameter values can be set or retrieved at any point. ```java ParameterStore parameters = site.getParameters(); parameters.setPageTitle("Registration Page"); site.setParameters(parameters); ``` ## Load The `load` method lets you load the properties and content of a clickwrap Group by key. ```java Group group = site.load("GROUP_KEY"); ``` Optionally, you can pass a custom `Map` as `renderData` for the second argument -- allowing you to alter the content each time the Group is loaded. For this reason, every response from the `load` request provides a unique `render_id` to use for activity tracking. ```java renderDataMap.put("order_id", 123456); renderDataMap.put("company_name", "Example LLC"); Group group = site.load("GROUP_KEY", renderDataMap); ``` ## Retrieve The `retrieve` method lets you load a Signer's acceptance history for a given set of Contract IDs. Providing a `signer_id` and an array of `contracts`, the response will contain a map of each Contract ID and its most recently accepted Version ID. ```java List contractIds = new ArrayList(); contractIds.add(1); contractIds.add(4); Map retrieve = activity.retrieve("SIGNER_ID", contractIds); ``` When invoked from a group object, the contracts from the group will be automatically loaded. ```java Map retrieve = group.retrieve("SIGNER_ID"); ``` ## Latest The `latest` method tells you if a Signer has accepted the latest Version for a given set of Contract IDs. This method is similar to the `retrieve` method, but instead of providing the actual Version ID that was last accepted, the response contains a boolean `true` or `false` for each contract ID. ```java Map latest = activity.latest("SIGNER_ID", contractIds); ``` When invoked from a group object, the contracts from the group will be automatically loaded. ```java Map latest = activity.latest("SIGNER_ID"); ``` ## Send The `send` method lets you track a Signer Action by sending data to the PactSafe Activity API. Provide an option from the `EventType` enum, as well as any parameters to save on the Action. The `signerId` parameter and `renderId` are required for most event types. ```java ParameterStore action = new ParameterStore(); action.setSignerId("john@example.com"); action.setRenderId(group.getParameters().getRenderId()); action.setPageTitle("My Test Page Title"); site.send(EventType.UPDATED, action); ``` ## Agreed The `agreed` method sends a Signer Action to the PactSafe Activity API with the event type `agreed`. Provide a `signer_id`, as well as any parameters to save on the Action. If the content being accepted was assigned a `render_id`, be sure to include that same `render_id` in the Action parameters. ```java ParameterStore action = new ParameterStore(); action.setSignerId("john@example.com"); action.setRenderId(group.getParameters().getRenderId()); Map customData = new HashMap(); customData.put("order_id", 123456); customData.put("sku", "MYTX772"); action.setCustomData(customData); site.agreed(action); ``` ## Exceptions All methods outside of `Activity` initialization are designed to throw a `PactSafeActivityException` Exception should an issue arrise in the processing of your request. Additionally, an `IllegalArgumentException` will be raised should illegal arguments be passed. ## Development For development, you can enable the `test_mode` parameter when the client is initialized. Any Signers or Actions created within test mode can be easily cleared from your account. ```java ParameterStore parameters = new ParameterStore(); parameters.setTestMode(true); Activity site = new Activity("ACCESS_KEY", parameters); ``` --- # Source: https://clickwrap-developer.ironcladapp.com/recipes/javascript-library-clickwrap-loading-a-clickwrap-101.md # Ironclad Clickwrap API Documentation ## Recipes ### Ironclad Clickwrap API Documentation [Jump to Content](#content) [![Ironclad Clickwrap API Documentation](https://files.readme.io/f31fe0a-small-Ironclad_logo_primary_color.png)](/) - [Guides](/docs) - [Clickwrap API Reference](/reference) - [Recipes](/recipes) - [App Login](https://app.pactsafe.com) [Home](/) [Guides](/docs) [Recipes](/recipes) [Clickwrap API Reference](/reference) v1.1 - [Guides](/docs) - [Clickwrap API Reference](/reference) - [Recipes](/recipes) - [App Login](https://app.pactsafe.com) - [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) - [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-101) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-clickwrap-10 --- # Source: https://clickwrap-developer.ironcladapp.com/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data.md # Ironclad Clickwrap API Documentation ## Recipes ### Ironclad Clickwrap API Documentation [Jump to Content](#content) [![Ironclad Clickwrap API Documentation](https://files.readme.io/f31fe0a-small-Ironclad_logo_primary_color.png)](/) - [Guides](/docs) - [Clickwrap API Reference](/reference) - [Recipes](/recipes) - [App Login](https://app.pactsafe.com) [Home](/) [Guides](/docs) [Recipes](/recipes) [Clickwrap API Reference](/reference) v1.1 - [Guides](/docs) - [Clickwrap API Reference](/reference) - [Recipes](/recipes) - [App Login](https://app.pactsafe.com) - [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) - [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-group-with-dynamic-contract-data) [Ironclad Main Website](https://www.iron --- # Source: https://clickwrap-developer.ironcladapp.com/recipes/javascript-library-clickwrap-loading-a-virtual-group.md # Ironclad Clickwrap API Documentation ## Recipes ### Ironclad Clickwrap API Documentation [Jump to Content](#content) [![Ironclad Clickwrap API Documentation](https://files.readme.io/f31fe0a-small-Ironclad_logo_primary_color.png)](/) - [Guides](/docs) - [Clickwrap API Reference](/reference) - [Recipes](/recipes) - [App Login](https://app.pactsafe.com) [Home](/) [Guides](/docs) [Clickwrap API Reference](/reference) [Recipes](/recipes) v1.1 - [Guides](/docs) - [Clickwrap API Reference](/reference) - [Recipes](/recipes) - [App Login](https://app.pactsafe.com) - [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) - [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-loading-a-virtual-group) [Ironclad Main Website](https://www.ironcladapp.com --- # Source: https://clickwrap-developer.ironcladapp.com/recipes/javascript-library-clickwrap-marketo-forms.md # Ironclad Clickwrap API Documentation ## Recipes ### Ironclad Clickwrap API Documentation [Jump to Content](#content) [![Ironclad Clickwrap API Documentation](https://files.readme.io/f31fe0a-small-Ironclad_logo_primary_color.png)](/) - [Guides](/docs) - [Clickwrap API Reference](/reference) - [Recipes](/recipes) - [App Login](https://app.pactsafe.com) [Home](/) [Guides](/docs) [Recipes](/recipes) [Clickwrap API Reference](/reference) v1.1 - [Guides](/docs) - [Clickwrap API Reference](/reference) - [Recipes](/recipes) - [App Login](https://app.pactsafe.com) - [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) - [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-marketo-forms) [Ironclad Main --- # Source: https://clickwrap-developer.ironcladapp.com/recipes/javascript-library-clickwrap-sending-acceptance-manually.md # Ironclad Clickwrap API Documentation ## Recipes ### Ironclad Clickwrap API Documentation [Jump to Content](#content) [![Ironclad Clickwrap API Documentation](https://files.readme.io/f31fe0a-small-Ironclad_logo_primary_color.png)](/) - [Guides](/docs) - [Clickwrap API Reference](/reference) - [Recipes](/recipes) - [App Login](https://app.pactsafe.com) [Home](/) [Guides](/docs) [Clickwrap API Reference](/reference) [Recipes](/recipes) v1.1 - [Guides](/docs) - [Clickwrap API Reference](/reference) - [Recipes](/recipes) - [App Login](https://app.pactsafe.com) - [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) - [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-acceptance-manually) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending --- # Source: https://clickwrap-developer.ironcladapp.com/recipes/javascript-library-clickwrap-sending-custom-data.md # Ironclad Clickwrap API Documentation ## Recipes ### Ironclad Clickwrap API Documentation [Jump to Content](#content) [![Ironclad Clickwrap API Documentation](https://files.readme.io/f31fe0a-small-Ironclad_logo_primary_color.png)](/) - [Guides](/docs) - [Clickwrap API Reference](/reference) - [Recipes](/recipes) - [App Login](https://app.pactsafe.com) [Home](/) [Guides](/docs) [Clickwrap API Reference](/reference) [Recipes](/recipes) v1.1 - [Guides](/docs) - [Clickwrap API Reference](/reference) - [Recipes](/recipes) - [App Login](https://app.pactsafe.com) - [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) - [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main Website](https://www.ironcladapp.com) [Log In](/login?redirect_uri=/recipes/javascript-library-clickwrap-sending-custom-data) [Ironclad Main --- # Source: https://clickwrap-developer.ironcladapp.com/docs/javascript-library-getting-started.md # JavaScript Library ## Overview With our JavaScript snippet, we make it as easy as possible to get started tracking acceptance with the Ironclad Clickwrap platform. Within the following guides, we'll cover what the snippet offers, how to use it, and things to look for. Click on one of the links below to get started! --- # Source: https://clickwrap-developer.ironcladapp.com/docs/javascript-library-reference-docs.md # JavaScript Library Reference Docs The following section provides much more detailed information on the Ironclad Clickwrap JavaScript library itself. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/javascript-sdk-considerations.md # General Considerations Before getting started with implementing the Ironclad Clickwrap JavaScript SDK, you may want to consider some of the following topics outlined on this page. While we aim to make our JavaScript SDK as easy to use for integrating standardized terms, there are some special considerations you should know before you begin implementation. ## Asynchronous Sending This is an **extremely important** consideration when implementing our library in workflows where contracts absolutely need to be accepted before a person(s) moves forward in your workflow. In short, you'll need to implement features to ensure that Ironclad Clickwrap receives acceptance if your workflow requires it. While we won't cover the concept of asynchronous vs. synchronous in JavaScript within this guide, there are many wonderful (and highly detailed) resources on the Internet explaining when and how to use it. One example can be found here: [https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous). That being said, during your implementation of the Ironclad Clickwrap JavaScript SDK, be sure to utilize the callback feature available on all `send` calls or use the `valid` or `invalid` triggered events. ### Callback Method For example, when sending acceptance, I might use something like the following in my implementation: ```javascript // Where my Clickwrap group key is example-group _ps('example-group:send', 'agreed', { event_callback: function() { console.log('Finished sending!'); } }); ``` ### Sent Event Our JavaScript Library also provides a `sent` event notification when a send call is made. You can check the `eventType` to see the type of event that was sent and handle it accordingly. One thing to keep in mind, the `sent` event can be triggered regardless if the API call is made or not. When you disable automatic sending by setting `disable_sending` to `true` when configuring the Site or Group objects, then the `sent` will still be triggered even though the API doesn't receive the event. ```javascript _ps.on('sent', function(eventType, params, context, payload, batchId) { if(eventType === 'agreed') console.log('An agreed event occurred!'); }); ``` ## Client-side Data Capture and Server-side Sending The Ironclad Clickwrap JavaScript SDK can make embedding terms much easier into your environment, especially with the pre-built styling and available customizations we offer. But, we know some customers want greater control of sending acceptance data from their own backend, which may be beneficial depending on your volume and security needs. Accomplishing this is relatively easy with a couple of methods available in the SDK and using our Activity API. For example, once the user has accepted the terms (perhaps you know this with the `valid` triggered event offered), you can grab the payload typically sent from the SDK with the following: ```javascript // Assuming we have one Clickwrap Site and one group loaded // as there are multiple ways of getting the payload. // Simple call to get URL Encoded parameters. const myPayload = _ps.site.group.getPayload(); // Now that I have the params from the previous payload, // I can send an Agreed event with associated data to the API. fetch('https://pactsafe.io/send?et=agreed' + '&' + myPayload) .then(response => response.json()) .then(data => console.log(data)); ``` More detailed information on achieving this can be located on the [Using PS.js with back-end API calls](https://clickwrap-developer.ironcladapp.com/docs/using-psjs-with-back-end-api-calls) page. --- # Source: https://clickwrap-developer.ironcladapp.com/reference/list-all-signers-1-1.md # List all Signers # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/signers": { "get": { "summary": "List all Signers", "description": "", "operationId": "list-all-signers-1", "tags": [ "Signers" ], "parameters": [ { "in": "query", "name": "page", "description": "Page number to offset results for pagination. Defaults to 1.", "schema": { "type": "integer" } }, { "in": "query", "name": "per_page", "schema": { "type": "integer" } }, { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "query", "name": "filter", "description": "Filter activities by the various fields. Note the use of 'and' between the fields. Example: `event_type==agreed and signer_id==claddy@ironcladapp.com`.\n", "schema": { "type": "string" } }, { "in": "query", "name": "sort", "description": "Sort the results of your call by a field in the Request.", "schema": { "type": "string" } }, { "in": "query", "name": "fields", "schema": { "type": "string" } }, { "in": "query", "name": "no_count", "schema": { "type": "boolean" } }, { "in": "query", "name": "lean", "schema": { "type": "boolean" } } ], "responses": { "200": { "description": "200", "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "allOf": [ { "title": "Signer", "type": "object", "properties": { "uuid": { "type": "string", "example": "55e0820564a5846a5a0387c4", "readOnly": true }, "_id": { "type": "string", "readOnly": true }, "account": { "type": "integer", "readOnly": true, "example": 2, "default": 0 }, "site": { "type": "integer", "readOnly": true, "example": 2, "default": 0 }, "name": { "type": "string", "example": "Eric Prugh" }, "email": { "type": "string", "example": "eric@pactsafe.com" }, "email_hash": { "type": "string", "example": "20a9d8f9c7d8415b58ece4621a6517ca", "readOnly": true }, "mobile_number": { "type": "string", "example": "(317) 403-7298" }, "company_name": { "type": "string", "example": "PactSafe" }, "title": { "type": "string", "example": "Person" }, "sendable": { "type": "boolean", "example": true, "default": true, "readOnly": true }, "deliverable": { "title": "Deliverable", "type": "object", "readOnly": true, "properties": { "email": { "type": "boolean", "example": true, "default": true }, "email_status": { "enum": [ "processed", "dropped", "delivered", "deferred", "bounce", "open", "dropped", "click", "spamreport", "unsubscribe", "group_unsubscribe", "group_resubscribe" ], "title": "EmailStatus", "type": "string" }, "mobile_number": { "type": "boolean", "example": true, "default": true }, "mobile_number_status": { "enum": [ "failed", "delivered", "queued", "undelivered", "sent", "Opted out", "landline" ], "title": "MobileNumberStatus", "type": "string" } } }, "created_time": { "type": "string", "example": "2015-08-28T15:45:09.585Z", "readOnly": true }, "updated_time": { "type": "string", "example": "2015-08-28T15:45:09.585Z", "readOnly": true }, "latest_activity_time": { "type": "string", "default": null, "example": "2015-08-28T15:45:09.585Z", "readOnly": true }, "additional_attributes": { "type": "object", "additionalProperties": true, "properties": { "city": { "type": "string", "example": "Indianapolis" }, "mobile_number": { "type": "string", "example": "(317) 403-7298" }, "email": { "type": "string", "example": "eric@pactsafe.com" }, "first_name": { "type": "string", "example": "Eric" }, "last_name": { "type": "string", "example": "Prugh" }, "title": { "type": "string", "example": "Person" }, "company": { "type": "string", "example": "PactSafe" } } }, "last_action": { "readOnly": true, "type": "string", "example": "58b8db7e379e242c5b189d7d" }, "last_downloaded_time": { "type": "string", "default": null, "example": "2015-08-28T15:45:09.585Z", "readOnly": true }, "last_downloaded_by": { "readOnly": true, "type": "integer", "example": 1 }, "source": { "enum": [ "manual", "import", "api", "smartpact" ], "title": "SignerSource", "type": "string", "readOnly": true }, "notify": { "type": "boolean", "example": true, "default": true }, "amber_road": { "readOnly": true, "type": "object", "properties": { "isValid": { "type": "boolean" }, "status": { "type": "string" }, "screened_date": { "type": "string", "example": "2015-08-28T15:45:09.585Z" } } } } }, { "type": "object", "title": "Signer", "properties": { "signer_id": { "type": "string", "example": "eric@pactsafe.com", "readOnly": true }, "test_mode": { "type": "boolean", "example": false, "readOnly": true } } } ] } } } } } } } }, "deprecated": false } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/list-all-signers-2.md # List all Signers in a Site # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/sites/{site_id}/signers": { "get": { "summary": "List all Signers in a Site", "description": "", "operationId": "list-all-signers", "tags": [ "Signers" ], "parameters": [ { "name": "site_id", "in": "path", "description": "Numeric `id` of the Site to perform action with. Has example value.", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "page", "description": "Page number to offset results for pagination. Defaults to 1.", "schema": { "type": "integer" } }, { "in": "query", "name": "per_page", "schema": { "type": "integer" } }, { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "query", "name": "filter", "description": "Filter activities by the various fields. Note the use of 'and' between the fields. Example: `event_type==agreed and signer_id==claddy@ironcladapp.com`.\n", "schema": { "type": "string" } }, { "in": "query", "name": "sort", "description": "Sort the results of your call by a field in the Request.", "schema": { "type": "string" } }, { "in": "query", "name": "fields", "schema": { "type": "string" } }, { "in": "query", "name": "no_count", "schema": { "type": "boolean" } }, { "in": "query", "name": "lean", "schema": { "type": "boolean" } } ], "responses": { "200": { "description": "200", "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "allOf": [ { "title": "Signer", "type": "object", "properties": { "uuid": { "type": "string", "example": "55e0820564a5846a5a0387c4", "readOnly": true }, "_id": { "type": "string", "readOnly": true }, "account": { "type": "integer", "readOnly": true, "example": 2, "default": 0 }, "site": { "type": "integer", "readOnly": true, "example": 2, "default": 0 }, "name": { "type": "string", "example": "Eric Prugh" }, "email": { "type": "string", "example": "eric@pactsafe.com" }, "email_hash": { "type": "string", "example": "20a9d8f9c7d8415b58ece4621a6517ca", "readOnly": true }, "mobile_number": { "type": "string", "example": "(317) 403-7298" }, "company_name": { "type": "string", "example": "PactSafe" }, "title": { "type": "string", "example": "Person" }, "sendable": { "type": "boolean", "example": true, "default": true, "readOnly": true }, "deliverable": { "title": "Deliverable", "type": "object", "readOnly": true, "properties": { "email": { "type": "boolean", "example": true, "default": true }, "email_status": { "enum": [ "processed", "dropped", "delivered", "deferred", "bounce", "open", "dropped", "click", "spamreport", "unsubscribe", "group_unsubscribe", "group_resubscribe" ], "title": "EmailStatus", "type": "string" }, "mobile_number": { "type": "boolean", "example": true, "default": true }, "mobile_number_status": { "enum": [ "failed", "delivered", "queued", "undelivered", "sent", "Opted out", "landline" ], "title": "MobileNumberStatus", "type": "string" } } }, "created_time": { "type": "string", "example": "2015-08-28T15:45:09.585Z", "readOnly": true }, "updated_time": { "type": "string", "example": "2015-08-28T15:45:09.585Z", "readOnly": true }, "latest_activity_time": { "type": "string", "default": null, "example": "2015-08-28T15:45:09.585Z", "readOnly": true }, "additional_attributes": { "type": "object", "additionalProperties": true, "properties": { "city": { "type": "string", "example": "Indianapolis" }, "mobile_number": { "type": "string", "example": "(317) 403-7298" }, "email": { "type": "string", "example": "eric@pactsafe.com" }, "first_name": { "type": "string", "example": "Eric" }, "last_name": { "type": "string", "example": "Prugh" }, "title": { "type": "string", "example": "Person" }, "company": { "type": "string", "example": "PactSafe" } } }, "last_action": { "readOnly": true, "type": "string", "example": "58b8db7e379e242c5b189d7d" }, "last_downloaded_time": { "type": "string", "default": null, "example": "2015-08-28T15:45:09.585Z", "readOnly": true }, "last_downloaded_by": { "readOnly": true, "type": "integer", "example": 1 }, "source": { "enum": [ "manual", "import", "api", "smartpact" ], "title": "SignerSource", "type": "string", "readOnly": true }, "notify": { "type": "boolean", "example": true, "default": true }, "amber_road": { "readOnly": true, "type": "object", "properties": { "isValid": { "type": "boolean" }, "status": { "type": "string" }, "screened_date": { "type": "string", "example": "2015-08-28T15:45:09.585Z" } } } } }, { "type": "object", "title": "Signer", "properties": { "signer_id": { "type": "string", "example": "eric@pactsafe.com", "readOnly": true }, "test_mode": { "type": "boolean", "example": false, "readOnly": true } } } ] } } } } } } }, "404": { "description": "Not found." } }, "deprecated": false } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/list-all-site-memberships-1.md # List all Site Memberships Site Memberships includes the permissions of the user on the Site. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/sites/{site_id}/memberships": { "get": { "summary": "List all Site Memberships", "description": "Site Memberships includes the permissions of the user on the Site.", "tags": [ "Sites" ], "operationId": "list-all-site-memberships", "parameters": [ { "name": "site_id", "in": "path", "description": "The ID of the Ironclad Clickwrap Site.", "schema": { "type": "integer", "format": "integer" }, "required": true }, { "in": "query", "name": "page", "description": "Page number to offset results for pagination. Defaults to 1.", "schema": { "type": "integer" } }, { "in": "query", "name": "per_page", "schema": { "type": "integer" } }, { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "query", "name": "filter", "description": "Filter activities by the various fields. Note the use of 'and' between the fields. Example: `event_type==agreed and signer_id==claddy@ironcladapp.com`.\n", "schema": { "type": "string" } } ], "responses": { "200": { "description": "An array of memberships", "content": { "application/json": { "schema": { "allOf": [ { "properties": { "count": { "type": "integer" }, "has_more": { "type": "boolean" }, "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total_count": { "type": "integer" } }, "title": "Collection", "type": "object" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "properties": { "account": { "example": 1, "type": "integer" }, "created_time": { "example": "2015-06-12T21:28:40.036Z", "type": "string" }, "id": { "example": "557b4f08e1f61b9484f2296b", "type": "string" }, "membership_type": { "enum": [ "site", "account" ], "title": "Membership Type", "type": "string" }, "role": { "example": "owner", "type": "string" }, "site": { "example": 1, "type": "integer" }, "updated_time": { "example": "2015-06-12T21:28:40.038Z", "type": "string" }, "user": { "properties": { "email": { "example": "eric@pactsafe.com", "type": "string" }, "id": { "default": 0, "example": 1, "type": "integer" }, "locale": { "example": "en-US", "type": "string" }, "name": { "example": "Eric", "type": "string" }, "profiles": { "items": { "properties": { "created_time": { "example": "2015-06-12T21:28:14.680Z", "type": "string" }, "displayName": { "example": "Eric", "type": "string" }, "emails": { "items": { "example": "foo", "type": "string" }, "type": "array" }, "id": { "example": "eric@pactsafe.com", "type": "string" }, "photos": { "items": { "example": "foo", "type": "string" }, "type": "array" }, "provider": { "example": "local", "type": "string" }, "updated_time": { "example": "2015-06-12T21:28:14.680Z", "type": "string" } }, "type": "object" }, "type": "array" }, "time_zone": { "example": "EDT", "type": "string" }, "verified": { "default": true, "example": true, "type": "boolean" }, "verified_time": { "example": "2015-06-12T21:29:46.955Z", "type": "string" } }, "type": "object" } }, "type": "object" } } } } ] } } } }, "400": { "description": "Bad request." } }, "deprecated": false } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/loading-a-clickwrap-101.md # Loading a Clickwrap 101 ## Overview Below, we'll cover a few key topics to getting up and running with the Ironclad Clickwrap JavaScript Library. ## Requirements To get started, you'll need to ensure that you have the following: * Ironclad Clickwrap Site Access ID. More info in the [Authentication](https://clickwrap-developer.ironcladapp.com/docs/authentication-2) page. * Group key from a **published** Ironclad Clickwrap Group that contains published Ironclad Clickwrap contracts. * Development environment with SSL enabled ## Loading Your First Clickwrap ### Ironclad Clickwrap Snippet Our JavaScript snippet was designed to load our external JavaScript library and give you an interface to interact with your code. Load the snippet into your page, preferably in the `` of the page. ```javascript // Minified Clickwrap Snippet for Production Environment (function(w,d,s,c,f,n,t,g,a,b,l){w["PactSafeObject"]=n;w[n]=w[n]||function(){(w[n].q=w[n].q||[]).push(arguments)},w[n].on=function(){(w[n].e=w[n].e||[]).push(arguments)},w[n].once=function(){(w[n].eo=w[n].eo||[]).push(arguments)},w[n].off=function(){(w[n].o=w[n].o||[]).push(arguments)},w[n].t=1*new Date(),w[n].l=0;a=d.createElement(s);b=d.getElementsByTagName(s)[0];a.async=1;a.src=c;a.onload=a.onreadystatechange=function(){w[n].l=1};a.onerror=a.onabort=function(){w[n].l=0};b.parentNode.insertBefore(a,b);setTimeout(function(){if(!w[n].l&&!w[n].loaded){w[n].error=1;a=d.createElement(s);a.async=1;a.src=f;a.onload=a.onreadystatechange=function(){w[n].l=1};a.onerror=a.onabort=function(){w[n].l=0};b.parentNode.insertBefore(a,b);l=function(u,e){try{e=d.createElement("img");e.src="https://d3r8bdci515tjv.cloudfront.net/error.gif?t="+w[n].t+"&u="+encodeURIComponent(u);d.getElementsByTagName("body")[0].appendChild(e)}catch(x){}};l(c);setTimeout(function(){if(!w[n].l&&!w[n].loaded){w[n].error=1;if(g&&"function"==typeof g){g.call(this);}l(f)}},t)}},t)})(window,document,"script","https://vault.pactsafe.io/ps.min.js","https://d3l1mqnl5xpsuc.cloudfront.net/ps.min.js","_ps",5000,function(){window.console&&console.error&&console.error("Unable to load Ironclad Clickwrap Library.")}); ``` > 🚧 For Sandboxes and Trial Accounts on Demo Environment > > Use the snippet below for accounts on the Demo Environment. Accounts on the demo environment will have the following URL: [https://clickwrap.demo.pactsafe.com/](https://clickwrap.demo.pactsafe.com/). > > The snippet above is for production accounts using [https://clickwrap.pactsafe.com/](https://clickwrap.pactsafe.com/). ```javascript // Minified Clickwrap Snippet for Demo Environment (function(w,d,s,c,f,n,t,g,a,b,l){w["PactSafeObject"]=n;w[n]=w[n]||function(){(w[n].q=w[n].q||[]).push(arguments)},w[n].on=function(){(w[n].e=w[n].e||[]).push(arguments)},w[n].once=function(){(w[n].eo=w[n].eo||[]).push(arguments)},w[n].off=function(){(w[n].o=w[n].o||[]).push(arguments)},w[n].t=1*new Date(),w[n].l=0;a=d.createElement(s);b=d.getElementsByTagName(s)[0];a.async=1;a.src=c;a.onload=a.onreadystatechange=function(){w[n].l=1};a.onerror=a.onabort=function(){w[n].l=0};b.parentNode.insertBefore(a,b);setTimeout(function(){if(!w[n].l&&!w[n].loaded){w[n].error=1;a=d.createElement(s);a.async=1;a.src=f;a.onload=a.onreadystatechange=function(){w[n].l=1};a.onerror=a.onabort=function(){w[n].l=0};b.parentNode.insertBefore(a,b);l=function(u,e){try{e=d.createElement("img");e.src="https://d3r8bdci515tjv.cloudfront.net/error.gif?t="+w[n].t+"&u="+encodeURIComponent(u);d.getElementsByTagName("body")[0].appendChild(e)}catch(x){}};l(c);setTimeout(function(){if(!w[n].l&&!w[n].loaded){w[n].error=1;if(g&&"function"==typeof g){g.call(this);}l(f)}},t)}},t)})(window,document,"script","https://vault.demo.pactsafe.io/ps.min.js","https://d21iwaz8hush8a.cloudfront.net/ps.min.js","_ps",5000,function(){window.console&&console.error&&console.error("Unable to load Ironclad Clickwrap Library.")}); ``` ### Loading a Group In order to get your clickwrap loaded into the page, we need to create the Ironclad Clickwrap Site object with a Clickwrap Site Access ID and then load the Clickwrap group using its group key. Follow along in the code below. ```javascript // We'll need a couple of things to get started from Ironclad Clickwrap. var siteAccessId = '1e8ddd9d-f32c-4dc7-9c13-62095e6d4317'; // A Clickwrap Site Access ID var groupKey = "clickwrap-example"; // A Clickwrap Group Key. // Creates a Site object with the a Clickwrap Site Access ID. _ps('create', siteAccessId, { test_mode: true, // Allows you to clear test data from the Ironclad Clickwrap web app. }); // Since we're testing, we can enable debugging // which will log events to console. You'll want to // set this to false in a production environment. _ps.debug = true; // Options set on the Clickwrap Group. var groupOptions = { container_selector: 'clickwrapContainer', // HTML Element ID of where we want the clickwrap to load in the page. display_all: true, // Always display the contracts, even if previously signed by the Signer. signer_id_selector: 'exampleInputEmail1', // Uses the email input field value as the Signer ID and listen to the field. } // Load a Clickwrap group into the page. _ps('load', groupKey, groupOptions); ``` ## Clickwrap Acceptance ### Adding a Snapshot Location A snapshot location allows you associate visual evidence (a screenshot) of how agreement was visually presented to your end users. Navigate to the Snapshots tab and create a Snapshot Location. Ensure that this location is published. Then, place the following code after the JS snippet and `_ps('load')`. Replace 'location-key' with your specific Snapshot Location key. ```javascript _ps('set', 'snapshot_location', 'location-key'); ``` ### Sending Acceptance with Custom Data By default, Ironclad Clickwrap will automatically send acceptance when the Group's checkbox is checked and when the signer ID selector (in this case an email address field) contains a value. Alongside information about what contract version a user has signed, the Acceptance Activity Event will also include parameters such as Page Domain, Origin, Browser Timezone, etc. associated to the record. To associate additional information to the record, you can utilize our `Custom Data` feature. ```javascript //Send custom data to Ironclad Clickwrap to associate with an Acceptance Record _ps('set', 'custom_data', { order_number: "17392", additional_information: "N/A" }); ``` Additionally, some of this information can be associated with the specific Signer record that is created for each unique user. Some out of the box parameters include Title and Company. Use this following example to update the Signer information. ```javascript //Define custom_data to be associate with the Acceptance Record _ps('set', 'custom_data', { first_name: "John", last_name: "Walker", company_name: "Ironclad", title: "CEO" }); //Use that custom_data to update the Signer Record _ps('send', 'updated'); ``` ### Verifying Acceptance Pretty often, you'll want to ensure acceptance of the contracts within the group before proceeding. In order to do this, you can add validation that may look like the below. > 🚧 Example Only Code > > Please note that the example code is for demonstration purposes only. Your implementation will most likely be different than what is shown here. ```javascript // Get the form element on the page. var pageFormElement = function() { return document.getElementById('myPageForm'); } // Return whether to block the submission or not. var blockSubmission = function() { // Check to ensure we're able to get the Group successfully. if (_ps.getByKey(groupKey)) { // Return if we should block the submission using the .block() method // provided by the Group object. return _ps.getByKey(groupKey).block(); } else { // We weren't able to get the group, // so blocking form submission may be needed. return true; } } // We want to prevent the form submission // unless acceptance has gone through. function addFormAcceptanceValidation() { // Get the form element. var form = pageFormElement(); // Return if no form is found in the page. if (!form) return; // Add listener for form submissions. form.addEventListener('submit', function(event) { // Prevent the form from automatically submitting without // checking Clickwrap acceptance first. event.preventDefault(); if (!blockSubmission()) { // We don't need to block the form submission, // so submit the form. form.submit(); } else { // We can get the alert message if set on the group // or define our own if it's not. var acceptanceAlertLanguage = (_ps.getByKey(groupKey) && _ps.getByKey(groupKey).get('alert_message')) ? _ps.getByKey(groupKey).get('alert_message') : 'Please accept our Terms and Conditions.' // Alert the user that the Terms need to be accepted before continuing. alert(acceptanceAlertLanguage); } }); } // Set up validation of Terms before allowing form submission. if (document.readyState === 'loading') { // Loading hasn't finished yet document.addEventListener('DOMContentLoaded', addFormAcceptanceValidation); } else { // `DOMContentLoaded` has already fired addFormAcceptanceValidation(); } ``` ## Full Example Code Below, you'll find the code to a full working example, which includes a sample form validation piece. > 🚧 Example Only > > Please note that the example code is for demonstration purposes only. Your implementation will most likely be different than what is shown here. ```html Simple Form!

Clickwrap Example with a Form

``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/manually-sending-acceptance.md # Manually Sending Acceptance ## Overview The default behaviour for Embedded Clickwraps is to send acceptance as soon as the user checks the checkbox. When using our JavaScript Library, there may be some scenarios where you need to send acceptance manually rather than when the user checks the box since an acceptance event will be sent automatically by default. ## Example Scenarios Some common use cases as to why you may need to send acceptance manually: * You may want to confirm a form is fully validated before sending any data to Ironclad Clickwrap. This is especially true if you send additional data about the event (more on that later). * You may want to ensure acceptance has been submitted successfully before allowing a form submission to occur. * Your flow consists of multiple steps or is a multi-step form with the need for greater control. * Your overall implementation might only use pieces of the Ironclad Clickwrap JavaScript Library or might be more custom. ## How to Use When sending acceptance manually, there are two pieces to focus on: disabling default sending behavior upon load and enabling when you're ready to send acceptance. See below: ### Disable Automatic Sending This part is crucial to ensuring the acceptance isn't automatically sent. You can adjust this setting when configuring the JavaScript snippet with the property `disable_sending`. The example below shows when creating and configuring your Clickwrap Site object. ```javascript var siteAccessId = 'YOUR_SITE_ACCESS_ID'; _ps('create', siteAccessId, { disable_sending: true // Disable automatic sending with the JavaScript snippet. }); ``` ### Enable Sending and Send Agreed When you're ready to send acceptance to Ironclad Clickwrap, you can easily Send using the `_ps` function and your group key. The following example uses a callback to handle any additional logic like checking for an error when the sending happens or submitting a form. ```javascript var groupKey = 'my-clickwrap-group-key'; // Manually send acceptance with the Clickwrap Group. _ps(groupKey + ':send', 'agreed', { disable_sending: false, // We have to revert to allow sending with the snippet here. event_callback: function(err, eventType, group, request) { if (err) { // Something went wrong with sending the event. alert('Uh oh, something went wrong. Please try submitting again.'); // Alert the user return; } // Since we had no errors, go ahead and submit the form. form.submit(); } }); ``` > 🚧 Example Only Code > > Please note that the example code is for demonstration purposes only. Your implementation will most likely be different than what is shown here. ### Full Example Code ```html Simple Form!

Ironclad Clickwrap Example with a Form

``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/overview-copy.md # Overview Sites are individual entities underneath an Account. Groups, Contracts, and Versions are all contained within the Site context. ## Sites Overview Sites have a number of properties, including some information that can be inherited from the Account (like address and company name for example). Here's an example of an array of objects returned when hitting `GET => /v1.1/sites`: ```json { "page": 1, "per_page": 25, "count": 3, "data": [ { "access_id": "1d2fd973-990a-4759-9583-9469d7b31326", "email_reply_address": "team@pactsafe.com", "name": "Site 1", "url": "http://www.site1.com", "created_by": 1, "updated_by": 1, "email_display_name": "Site 1", "account": 1, "time_zone": "EDT", "locale": "en-US", "sandbox": false, "primary": true, "verified_time": "foo", "verified": false, "updated_time": "2015-06-12T21:28:40.020Z", "created_time": "2015-06-12T21:28:40.010Z", "id": 1 } ] } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/parameterstore-object.md # ParameterStore Object This reference documents the properties and methods available on the ParameterStore object. # Properties ## ParameterStore.data `DataObject` A DataObject used to store a set of parameters and their corresponding values. # Methods ## get Returns the value of a parameter using the `getter` function defined by the parameter definition. ```javascript parameters.get(parameter); ``` ### Arguments |NAME|REQUIRED|TYPE|DESCRIPTION| |----|----|----|--------| |`parameter`|True|String|The name of the parameter to return.| ### Returns ||| |----|--------| |`String, Number, Boolean, Object, etc.`|The value of the parameter or property, or undefined if the parameter isn't set.| ### Examples ```javascript // Returns the "signer_id" parameter. var val = parameters.get('signer_id'); // 'john@ironcladhq.com' ``` ## set Sets the value of one or more parameters, using the `setter` function defined by the parameter definition. Accepts either a single parameter name and value, or an object of multiple parameter name and value pairs to set. ```javascript parameters.set(parameter, value, override); ``` ```javascript parameters.set(parameters, override); ``` ### Arguments |\_|NAME|REQUIRED|TYPE|DESCRIPTION| |----|----|----|----|--------| |Option 1|`parameter`|True|String|The name of the parameter to set.| ||`value`|True|String, Number, Object, Function, etc.|The value of the parameter to set.| |Option 2|`parameters`|True|Object|An object containing one or more parameter name and value pairs to set.| ||`override`|False|Boolean|A flag indicating if the parameters should be set as temporary override values.| ### Returns No Return Value ### Examples ```javascript // Sets the "signer_id" parameter. parameters.set('signer_id', 'john@ironcladhq.com', false); // Sets the "contracts" parameter as an override value. parameters.set('contracts', [ 10, 14 ], true); ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/patch_contracts-contract-id-versions-version-number.md # Update a Version by Number Update a Contract Version by Version Number # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/contracts/{contract_id}/versions/{version_number}": { "patch": { "summary": "Update a Version by Number", "tags": [ "Contracts" ], "parameters": [ { "in": "path", "name": "contract_id", "description": "The ID of your contract.", "required": true, "schema": { "type": "integer", "format": "integer" } }, { "in": "path", "name": "version_number", "description": "Numeric number of the Version (e.g., version 1 of Agreement with id 1).", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "requestBody": { "content": { "application/json": { "schema": { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] } } } }, "responses": { "200": { "description": "Updated Version", "content": { "application/json": { "schema": { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/patch_contracts-contract-id.md # Update a Contract Update a Contract by ID # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/contracts/{contract_id}": { "patch": { "summary": "Update a Contract", "tags": [ "Contracts" ], "parameters": [ { "in": "path", "name": "contract_id", "description": "The ID of the Contract.", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "requestBody": { "content": { "application/json": { "schema": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } } } }, "responses": { "200": { "description": "Updated Contract", "content": { "application/json": { "schema": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/patch_groups-group-id.md # Update a Group Update a Group by ID # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/groups/{group_id}": { "patch": { "summary": "Update a Group", "description": "Update a Group by ID", "tags": [ "Groups" ], "parameters": [ { "in": "path", "name": "group_id", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "requestBody": { "content": { "application/json": { "schema": { "title": "Group", "type": "object", "properties": { "id": { "type": "integer", "readOnly": true, "default": 0, "example": 1 }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "paused": { "type": "boolean", "readOnly": true }, "paused_by": { "type": "integer", "readOnly": true, "example": 5 }, "paused_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "pending_changes": { "type": "boolean", "readOnly": true }, "name": { "type": "string", "example": "Login Terms" }, "key": { "type": "string", "example": "group-0rsabrt5a" }, "description": { "type": "string", "example": "This is a description of the Login Terms group." }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other groups.", "items": { "type": "string" } }, "type": { "title": "GroupType", "type": "string", "enum": [ "browsewrap", "clickwrap", "form", "policy" ] }, "style": { "title": "GroupStyle", "type": "string", "enum": [ "floating", "full", "scroll", "checkbox", "combined", "embedded" ] }, "custom_styles": { "type": "string", "description": "Custom CSS styles to apply to the embedded clickwrap group." }, "rendered_by_user": { "type": "boolean" }, "expect_agreed_click": { "type": "boolean" }, "expect_disagreed": { "type": "boolean" }, "container_selector": { "type": "string", "description": "The CSS selector for the group container element." }, "signer_id_selector": { "type": "string", "description": "The CSS selector for the input element containing the signer ID value." }, "form_selector": { "type": "string", "description": "The CSS selector for the form element the group belongs to." }, "block_submission": { "type": "boolean", "default": true }, "force_scroll": { "type": "boolean", "default": false }, "auto_run": { "type": "boolean", "default": true }, "display_all": { "type": "boolean", "default": true }, "alert_message": { "type": "string", "default": "Before you can submit this form, you must accept all of our legal contracts." }, "acceptance_language": { "type": "string", "description": "The language to display alongside the group checkbox." }, "confirmation_email": { "type": "boolean", "default": false }, "hide_record_summary": { "type": "boolean", "default": false }, "opt_out_language": { "type": "string" }, "target_jurisdictions": { "type": "array", "items": { "type": "string" } }, "target_selector": { "type": "string" }, "position": { "title": "BrowsewrapPosition", "type": "string", "enum": [ "auto", "left", "right", "center" ] }, "open_legal_center": { "type": "boolean", "default": true }, "always_visible": { "type": "boolean", "default": false }, "badge_text": { "type": "string", "description": "The text to display on the floating browsewrap badge." }, "instructions": { "type": "string" }, "protected_url": { "type": "boolean" }, "redirect_url": { "type": "string" }, "contracts": { "type": "array", "items": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } }, "validate_unique_classifications": { "type": "array", "items": { "type": "string" } }, "dynamic": { "type": "boolean", "default": false }, "render_data": { "type": "object" }, "notification_email": { "type": "string", "description": "The email address to send internal notifications to when a group is accepted." }, "published_endpoint": { "type": "string", "description": "The URL to the published group.", "readOnly": true }, "snapshots_enabled": { "type": "boolean" }, "snapshot_config": { "type": "string" }, "snapshot": { "title": "GroupSnapshot", "type": "object", "properties": { "image_path": { "type": "string" }, "last_captured_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "latest": { "type": "string" } } }, "snapshot_locations": { "type": "array", "items": { "type": "string" } }, "is_associated_with_location": { "type": "boolean", "readOnly": true }, "download_contracts": { "type": "boolean", "default": false } } } } } }, "responses": { "200": { "description": "Updated Group", "content": { "application/json": { "schema": { "title": "Group", "type": "object", "properties": { "id": { "type": "integer", "readOnly": true, "default": 0, "example": 1 }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "paused": { "type": "boolean", "readOnly": true }, "paused_by": { "type": "integer", "readOnly": true, "example": 5 }, "paused_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "pending_changes": { "type": "boolean", "readOnly": true }, "name": { "type": "string", "example": "Login Terms" }, "key": { "type": "string", "example": "group-0rsabrt5a" }, "description": { "type": "string", "example": "This is a description of the Login Terms group." }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other groups.", "items": { "type": "string" } }, "type": { "title": "GroupType", "type": "string", "enum": [ "browsewrap", "clickwrap", "form", "policy" ] }, "style": { "title": "GroupStyle", "type": "string", "enum": [ "floating", "full", "scroll", "checkbox", "combined", "embedded" ] }, "custom_styles": { "type": "string", "description": "Custom CSS styles to apply to the embedded clickwrap group." }, "rendered_by_user": { "type": "boolean" }, "expect_agreed_click": { "type": "boolean" }, "expect_disagreed": { "type": "boolean" }, "container_selector": { "type": "string", "description": "The CSS selector for the group container element." }, "signer_id_selector": { "type": "string", "description": "The CSS selector for the input element containing the signer ID value." }, "form_selector": { "type": "string", "description": "The CSS selector for the form element the group belongs to." }, "block_submission": { "type": "boolean", "default": true }, "force_scroll": { "type": "boolean", "default": false }, "auto_run": { "type": "boolean", "default": true }, "display_all": { "type": "boolean", "default": true }, "alert_message": { "type": "string", "default": "Before you can submit this form, you must accept all of our legal contracts." }, "acceptance_language": { "type": "string", "description": "The language to display alongside the group checkbox." }, "confirmation_email": { "type": "boolean", "default": false }, "hide_record_summary": { "type": "boolean", "default": false }, "opt_out_language": { "type": "string" }, "target_jurisdictions": { "type": "array", "items": { "type": "string" } }, "target_selector": { "type": "string" }, "position": { "title": "BrowsewrapPosition", "type": "string", "enum": [ "auto", "left", "right", "center" ] }, "open_legal_center": { "type": "boolean", "default": true }, "always_visible": { "type": "boolean", "default": false }, "badge_text": { "type": "string", "description": "The text to display on the floating browsewrap badge." }, "instructions": { "type": "string" }, "protected_url": { "type": "boolean" }, "redirect_url": { "type": "string" }, "contracts": { "type": "array", "items": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } }, "validate_unique_classifications": { "type": "array", "items": { "type": "string" } }, "dynamic": { "type": "boolean", "default": false }, "render_data": { "type": "object" }, "notification_email": { "type": "string", "description": "The email address to send internal notifications to when a group is accepted." }, "published_endpoint": { "type": "string", "description": "The URL to the published group.", "readOnly": true }, "snapshots_enabled": { "type": "boolean" }, "snapshot_config": { "type": "string" }, "snapshot": { "title": "GroupSnapshot", "type": "object", "properties": { "image_path": { "type": "string" }, "last_captured_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "latest": { "type": "string" } } }, "snapshot_locations": { "type": "array", "items": { "type": "string" } }, "is_associated_with_location": { "type": "boolean", "readOnly": true }, "download_contracts": { "type": "boolean", "default": false } } } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/patch_locations-id.md # Update a Snapshot location Requires **manage** permissions for Snapshots. `key` can only be changed if the Snapshot Locaiton is in the `draft` (unpublished) state # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "tags": [ { "name": "Snapshots" } ], "paths": { "/locations/{id}": { "patch": { "description": "Requires **manage** permissions for Snapshots. `key` can only be changed if the Snapshot Locaiton is in the `draft` (unpublished) state", "summary": "Update a Snapshot location", "tags": [ "Snapshots" ], "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "oneOf": [ { "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" } ], "properties": { "capture_attempts": { "type": "integer", "readOnly": true }, "capture_url": { "type": "string" }, "error_message": { "type": "string", "readOnly": true }, "frequency": { "enum": [ "daily", "weekly", "monthly", "never" ], "title": "Frequency", "type": "string" }, "location_type": { "enum": [ "web" ], "title": "LocationTypeWeb", "type": "string" }, "platform": { "enum": [ "desktop", "ios", "android" ], "title": "Platforms", "type": "string" } }, "title": "WebLocation", "type": "object" }, { "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" }, { "properties": { "application_id": { "type": "string" }, "application_name": { "type": "string" }, "mobile_os": { "description": "Default 'ios'", "enum": [ "ios", "android" ], "title": "Mobile OS", "type": "string" } } }, { "properties": { "location_type": { "enum": [ "mobile_app" ], "title": "LocationTypeMobile", "type": "string" } } } ], "title": "MobileLocation", "type": "object" } ] } } } }, "responses": { "200": { "description": "Success.", "content": { "application/json": { "schema": { "properties": { "data": { "oneOf": [ { "required": [ "platform", "frequency", "published", "published_time", "status", "location_type", "key", "name", "capture_url", "created_time", "updated_time", "created_by", "updated_by", "site", "account", "id" ], "title": "WebLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" } ], "properties": { "capture_attempts": { "type": "integer", "readOnly": true }, "capture_url": { "type": "string" }, "error_message": { "type": "string", "readOnly": true }, "frequency": { "enum": [ "daily", "weekly", "monthly", "never" ], "title": "Frequency", "type": "string" }, "location_type": { "enum": [ "web" ], "title": "LocationTypeWeb", "type": "string" }, "platform": { "enum": [ "desktop", "ios", "android" ], "title": "Platforms", "type": "string" } }, "type": "object" }, { "required": [ "mobile_os", "published", "published_time", "status", "location_type", "key", "name", "application_id", "application_name", "created_by", "updated_by", "site", "account", "created_time", "updated_time", "id" ], "title": "MobileLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" }, { "properties": { "application_id": { "type": "string" }, "application_name": { "type": "string" }, "mobile_os": { "description": "Default 'ios'", "enum": [ "ios", "android" ], "title": "Mobile OS", "type": "string" } } }, { "properties": { "location_type": { "enum": [ "mobile_app" ], "title": "LocationTypeMobile", "type": "string" } } } ], "type": "object" } ] } } } } } }, "400": { "description": "Bad request." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/patch_versions-version-id.md # Update a Version Before updating a Version, a new Version must be created in Draft status. More information on creating a version can be found [here](https://clickwrap-developer.ironcladapp.com/v0.0.1/reference/create-a-new-version). Specific Editable Properties: When a version is Published, only certain properties may be edited. Properties that are editable while published include `effective_time` and `effective_until_time`. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/versions/{version_id}": { "patch": { "summary": "Update a Version", "description": "Before updating a Version, a new Version must be created in Draft status. More information on creating a version can be found [here](https://clickwrap-developer.ironcladapp.com/v0.0.1/reference/create-a-new-version).\n\nSpecific Editable Properties: When a version is Published, only certain properties may be edited. Properties that are editable while published\ninclude `effective_time` and `effective_until_time`.\n", "tags": [ "Versions" ], "parameters": [ { "in": "path", "name": "version_id", "description": "The unique ID of the Contract Version.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] } } } }, "responses": { "200": { "description": "Updated Version", "content": { "application/json": { "schema": { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_contracts-contract-id-restore.md # Restore the latest deprecated Version of a Contract Allow the customer to restore the latest deprecated Version to published status. Note: this operation would fail if there are actions tied to current published version. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/contracts/{contract_id}/restore": { "post": { "summary": "Restore the latest deprecated Version of a Contract", "description": "Allow the customer to restore the latest deprecated Version to published status.\n\nNote: this operation would fail if there are actions tied to current published version.\n", "tags": [ "Contracts" ], "parameters": [ { "in": "path", "name": "contract_id", "description": "The ID of your contract.", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "responses": { "200": { "description": "Restored Contract", "content": { "application/json": { "schema": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_contracts-contract-id-versions-version-number-publish.md # Publish a Version To simplify the publishing of Versions via API, we've added a very simple route to call instead of including `{version_number}`. Simply `POST` to `/v1.1/contracts/{contract_id}/versions/@latest/publish`. Note: This is not publishing by the id of the Version. To publish a Version by id, call `/v1.1/versions/{version_id}/publish`. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/contracts/{contract_id}/versions/{version_number}/publish": { "post": { "summary": "Publish a Version", "description": "To simplify the publishing of Versions via API, we've added a very simple route to call instead of including `{version_number}`.\nSimply `POST` to `/v1.1/contracts/{contract_id}/versions/@latest/publish`.\n\nNote: This is not publishing by the id of the Version. To publish a Version by id, call `/v1.1/versions/{version_id}/publish`.\n", "tags": [ "Contracts" ], "parameters": [ { "in": "path", "name": "contract_id", "description": "The ID of your contract.", "required": true, "schema": { "type": "integer", "format": "integer" } }, { "in": "path", "name": "version_number", "description": "Numeric number of the Version (e.g., version 1 of Agreement with id 1).", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "responses": { "200": { "description": "Published Contract Version", "content": { "application/json": { "schema": { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_contracts-contract-id-versions.md # Create a Version There are a couple of important things to note when creating a new Version for a Contract: * The latest Version must be published before creating a new Version using the publish endpoint. * There is a separate publish endpoint to use when publishing a Version: `/v1.1/contracts/{contract_id}/versions/{id}/publish` or `/v1.1/contracts/{contract_id}/versions/@latest/publish`. * To get the latest Version or which Version is published, simply tack on `@latest` or `@published` to your `GET` call to `/v1.1/contracts/{contract_id}/versions/`. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/contracts/{contract_id}/versions": { "post": { "summary": "Create a Version", "description": "There are a couple of important things to note when creating a new Version for a Contract:\n* The latest Version must be published before creating a new Version using the publish endpoint.\n* There is a separate publish endpoint to use when publishing a Version: `/v1.1/contracts/{contract_id}/versions/{id}/publish`\n or `/v1.1/contracts/{contract_id}/versions/@latest/publish`.\n* To get the latest Version or which Version is published, simply tack on `@latest` or `@published` to your `GET` call to\n `/v1.1/contracts/{contract_id}/versions/`.\n", "tags": [ "Contracts" ], "parameters": [ { "in": "path", "name": "contract_id", "description": "The ID of your contract.", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "requestBody": { "content": { "application/json": { "schema": { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] } } } }, "responses": { "200": { "description": "Created Version.", "content": { "application/json": { "schema": { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_contracts-publish.md # Create and Publish a Contract Note: Only supported for HTML contracts at this time. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/contracts/publish": { "post": { "summary": "Create and Publish a Contract", "description": "Note: Only supported for HTML contracts at this time.\n", "tags": [ "Contracts" ], "requestBody": { "content": { "application/json": { "schema": { "title": "CreateContractRequest", "allOf": [ { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] }, { "type": "object", "properties": { "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } } } ] } } } }, "responses": { "200": { "description": "Contract and version created.", "content": { "application/json": { "schema": { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_extract-evidence.md # Create an Export Creates an export job. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/extract/evidence": { "post": { "description": "Creates an export job.", "summary": "Create an Export", "tags": [ "Extraction" ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "start_date": { "type": "string", "format": "date-time" }, "end_date": { "type": "string", "format": "date-time", "description": "If not provided, it defaults to now. Cannot be earlier than \"start_date\". Selected date range cannot exceed maximum allowed days for the site." }, "sort": { "type": "string" }, "filter": { "type": "object" }, "select": { "type": "object", "properties": { "standard": { "type": "array", "items": { "type": "string" } }, "connection": { "type": "array", "items": { "type": "string" } }, "custom": { "type": "array", "items": { "type": "string" } }, "render": { "type": "array", "items": { "type": "string" } } } }, "standard_all": { "type": "boolean", "description": "If provided as true, all standard fields are included in the export file. This will override the \"select.standard\" array." }, "connection_all": { "type": "boolean", "description": "If provided as true, all connection fields are included in the export file. This will override the \"select.connection\" array." }, "custom_all": { "type": "boolean", "description": "If provided as true, all custom fields are included in the export file. This will override the \"select.custom\" array." }, "export_types": { "type": "array", "description": "Array can include: `clickwrap_activities`, `clickwrap_activities_as_pdfs`", "items": { "type": "string" } } }, "type": "object", "required": [ "start_date" ], "title": "EvidenceExportRequest" }, "example": { "start_date": "2022-10-06T00:00:00.000Z", "end_date": "2022-10-06T00:00:00.000Z", "sort": "-created_time", "select": { "standard": [ "uuid", "created_time", "batch", "session", "event_time", "contract", "version" ] }, "filter": { "contract": { "_id": 1 }, "and": [ { "version_number": { "$gt": 1 } }, { "version_number": { "$lte": 3 } } ] }, "connection_all": true, "custom_all": true, "export_types": [ "clickwrap_activities", "clickwrap_activities_as_pdfs" ] } } } }, "responses": { "201": { "description": "Created.", "content": { "application/json": { "schema": { "properties": { "job_name": { "type": "string" }, "status": { "enum": [ "pending", "scheduled", "started", "success", "failed" ], "title": "Status", "type": "string" }, "source": { "enum": [ "manual", "cron", "api" ], "title": "Source", "type": "string" }, "account": { "readOnly": true, "type": "integer" }, "site": { "readOnly": true, "type": "integer" }, "created_by": { "readOnly": true, "type": "integer" }, "active": { "type": "boolean" }, "message": { "type": "string" }, "created_time": { "type": "string", "description": "ISO 8601 formatted." }, "updated_time": { "type": "string", "description": "ISO 8601 formatted." }, "data": { "type": "object" }, "retry_count": { "type": "integer" } }, "title": "ScheduledJobResponse", "type": "object" }, "example": { "status": "pending", "source": "api", "retry_count": 0, "active": true, "job_name": "ExtractEvidenceCSV", "message": "Export job is currently pending.", "created_time": "2023-01-06T17:00:01.901Z", "updated_time": "2023-01-06T17:00:01.901Z", "id": "000000000000000000000000" } } } }, "400": { "description": "Bad request." }, "403": { "description": "Forbidden." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_groups-group-id-publish.md # Publish a Group Publish a Group by ID # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/groups/{group_id}/publish": { "post": { "summary": "Publish a Group", "description": "Publish a Group by ID", "tags": [ "Groups" ], "parameters": [ { "in": "path", "name": "group_id", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "responses": { "200": { "description": "Published Group", "content": { "application/json": { "schema": { "title": "Group", "type": "object", "properties": { "id": { "type": "integer", "readOnly": true, "default": 0, "example": 1 }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "paused": { "type": "boolean", "readOnly": true }, "paused_by": { "type": "integer", "readOnly": true, "example": 5 }, "paused_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "pending_changes": { "type": "boolean", "readOnly": true }, "name": { "type": "string", "example": "Login Terms" }, "key": { "type": "string", "example": "group-0rsabrt5a" }, "description": { "type": "string", "example": "This is a description of the Login Terms group." }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other groups.", "items": { "type": "string" } }, "type": { "title": "GroupType", "type": "string", "enum": [ "browsewrap", "clickwrap", "form", "policy" ] }, "style": { "title": "GroupStyle", "type": "string", "enum": [ "floating", "full", "scroll", "checkbox", "combined", "embedded" ] }, "custom_styles": { "type": "string", "description": "Custom CSS styles to apply to the embedded clickwrap group." }, "rendered_by_user": { "type": "boolean" }, "expect_agreed_click": { "type": "boolean" }, "expect_disagreed": { "type": "boolean" }, "container_selector": { "type": "string", "description": "The CSS selector for the group container element." }, "signer_id_selector": { "type": "string", "description": "The CSS selector for the input element containing the signer ID value." }, "form_selector": { "type": "string", "description": "The CSS selector for the form element the group belongs to." }, "block_submission": { "type": "boolean", "default": true }, "force_scroll": { "type": "boolean", "default": false }, "auto_run": { "type": "boolean", "default": true }, "display_all": { "type": "boolean", "default": true }, "alert_message": { "type": "string", "default": "Before you can submit this form, you must accept all of our legal contracts." }, "acceptance_language": { "type": "string", "description": "The language to display alongside the group checkbox." }, "confirmation_email": { "type": "boolean", "default": false }, "hide_record_summary": { "type": "boolean", "default": false }, "opt_out_language": { "type": "string" }, "target_jurisdictions": { "type": "array", "items": { "type": "string" } }, "target_selector": { "type": "string" }, "position": { "title": "BrowsewrapPosition", "type": "string", "enum": [ "auto", "left", "right", "center" ] }, "open_legal_center": { "type": "boolean", "default": true }, "always_visible": { "type": "boolean", "default": false }, "badge_text": { "type": "string", "description": "The text to display on the floating browsewrap badge." }, "instructions": { "type": "string" }, "protected_url": { "type": "boolean" }, "redirect_url": { "type": "string" }, "contracts": { "type": "array", "items": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } }, "validate_unique_classifications": { "type": "array", "items": { "type": "string" } }, "dynamic": { "type": "boolean", "default": false }, "render_data": { "type": "object" }, "notification_email": { "type": "string", "description": "The email address to send internal notifications to when a group is accepted." }, "published_endpoint": { "type": "string", "description": "The URL to the published group.", "readOnly": true }, "snapshots_enabled": { "type": "boolean" }, "snapshot_config": { "type": "string" }, "snapshot": { "title": "GroupSnapshot", "type": "object", "properties": { "image_path": { "type": "string" }, "last_captured_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "latest": { "type": "string" } } }, "snapshot_locations": { "type": "array", "items": { "type": "string" } }, "is_associated_with_location": { "type": "boolean", "readOnly": true }, "download_contracts": { "type": "boolean", "default": false } } } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_locations-id-archive.md # Archive a Snapshot location. Requires **manage** permissions for Snapshots. Only allow for published locations now. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "tags": [ { "name": "Snapshots" } ], "paths": { "/locations/{id}/archive": { "post": { "description": "Requires **manage** permissions for Snapshots. Only allow for published locations now.", "summary": "Archive a Snapshot location.", "tags": [ "Snapshots" ], "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "archived_reason": { "type": "string" } } } } } }, "responses": { "200": { "description": "Success.", "content": { "application/json": { "schema": { "properties": { "data": { "oneOf": [ { "required": [ "platform", "frequency", "published", "published_time", "status", "location_type", "key", "name", "capture_url", "created_time", "updated_time", "created_by", "updated_by", "site", "account", "id" ], "title": "WebLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" } ], "properties": { "capture_attempts": { "type": "integer", "readOnly": true }, "capture_url": { "type": "string" }, "error_message": { "type": "string", "readOnly": true }, "frequency": { "enum": [ "daily", "weekly", "monthly", "never" ], "title": "Frequency", "type": "string" }, "location_type": { "enum": [ "web" ], "title": "LocationTypeWeb", "type": "string" }, "platform": { "enum": [ "desktop", "ios", "android" ], "title": "Platforms", "type": "string" } }, "type": "object" }, { "required": [ "mobile_os", "published", "published_time", "status", "location_type", "key", "name", "application_id", "application_name", "created_by", "updated_by", "site", "account", "created_time", "updated_time", "id" ], "title": "MobileLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" }, { "properties": { "application_id": { "type": "string" }, "application_name": { "type": "string" }, "mobile_os": { "description": "Default 'ios'", "enum": [ "ios", "android" ], "title": "Mobile OS", "type": "string" } } }, { "properties": { "location_type": { "enum": [ "mobile_app" ], "title": "LocationTypeMobile", "type": "string" } } } ], "type": "object" } ] } } } } } }, "400": { "description": "Bad request." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_locations-id-clone.md # Clone a Snapshot location. Requires **manage** permissions for Snapshots. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "tags": [ { "name": "Snapshots" } ], "paths": { "/locations/{id}/clone": { "post": { "tags": [ "Snapshots" ], "summary": "Clone a Snapshot location.", "description": "Requires **manage** permissions for Snapshots.\n", "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "A cloned Snapshot location.", "content": { "application/json": { "schema": { "properties": { "data": { "oneOf": [ { "required": [ "platform", "frequency", "published", "published_time", "status", "location_type", "key", "name", "capture_url", "created_time", "updated_time", "created_by", "updated_by", "site", "account", "id" ], "title": "WebLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" } ], "properties": { "capture_attempts": { "type": "integer", "readOnly": true }, "capture_url": { "type": "string" }, "error_message": { "type": "string", "readOnly": true }, "frequency": { "enum": [ "daily", "weekly", "monthly", "never" ], "title": "Frequency", "type": "string" }, "location_type": { "enum": [ "web" ], "title": "LocationTypeWeb", "type": "string" }, "platform": { "enum": [ "desktop", "ios", "android" ], "title": "Platforms", "type": "string" } }, "type": "object" }, { "required": [ "mobile_os", "published", "published_time", "status", "location_type", "key", "name", "application_id", "application_name", "created_by", "updated_by", "site", "account", "created_time", "updated_time", "id" ], "title": "MobileLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" }, { "properties": { "application_id": { "type": "string" }, "application_name": { "type": "string" }, "mobile_os": { "description": "Default 'ios'", "enum": [ "ios", "android" ], "title": "Mobile OS", "type": "string" } } }, { "properties": { "location_type": { "enum": [ "mobile_app" ], "title": "LocationTypeMobile", "type": "string" } } } ], "type": "object" } ], "type": "object" } }, "type": "object" } } } }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_locations-id-publish.md # Publish a Snapshot location Requires **manage** permissions for Snapshots. If your account has met its published location limit, this request will fail with a 400. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "tags": [ { "name": "Snapshots" } ], "paths": { "/locations/{id}/publish": { "post": { "description": "Requires **manage** permissions for Snapshots.\nIf your account has met its published location limit, this request will fail with a 400.\n", "summary": "Publish a Snapshot location", "tags": [ "Snapshots" ], "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "A published Snapshot location.", "content": { "application/json": { "schema": { "properties": { "data": { "oneOf": [ { "required": [ "platform", "frequency", "published", "published_time", "status", "location_type", "key", "name", "capture_url", "created_time", "updated_time", "created_by", "updated_by", "site", "account", "id" ], "title": "WebLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" } ], "properties": { "capture_attempts": { "type": "integer", "readOnly": true }, "capture_url": { "type": "string" }, "error_message": { "type": "string", "readOnly": true }, "frequency": { "enum": [ "daily", "weekly", "monthly", "never" ], "title": "Frequency", "type": "string" }, "location_type": { "enum": [ "web" ], "title": "LocationTypeWeb", "type": "string" }, "platform": { "enum": [ "desktop", "ios", "android" ], "title": "Platforms", "type": "string" } }, "type": "object" }, { "required": [ "mobile_os", "published", "published_time", "status", "location_type", "key", "name", "application_id", "application_name", "created_by", "updated_by", "site", "account", "created_time", "updated_time", "id" ], "title": "MobileLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" }, { "properties": { "application_id": { "type": "string" }, "application_name": { "type": "string" }, "mobile_os": { "description": "Default 'ios'", "enum": [ "ios", "android" ], "title": "Mobile OS", "type": "string" } } }, { "properties": { "location_type": { "enum": [ "mobile_app" ], "title": "LocationTypeMobile", "type": "string" } } } ], "type": "object" } ], "type": "object" } }, "type": "object" } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_locations-id-snapshots-capture.md # Trigger a Snapshot capture. Requires **upload** or **manage** permissions. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "tags": [ { "name": "Snapshots" } ], "paths": { "/locations/{id}/snapshots/capture": { "post": { "tags": [ "Snapshots" ], "summary": "Trigger a Snapshot capture.", "description": "Requires **upload** or **manage** permissions.", "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success.", "content": { "application/json": { "schema": { "properties": { "data": { "title": "Snapshot", "type": "object", "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_by": { "readOnly": true, "type": "integer" }, "archived_reason": { "type": "string" }, "captured_time": { "description": "ISO 8601 formatted.", "type": "string" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "expiration_time": { "readOnly": true, "type": "string" }, "id": { "readOnly": true, "type": "string" }, "image_path": { "readOnly": true, "type": "string" }, "is_manual": { "readOnly": true, "type": "boolean" }, "is_test": { "type": "boolean" }, "metadata": { "oneOf": [ { "type": "object", "title": "SnapshotWebMetadata", "properties": { "captured_time": { "description": "ISO 8601 formatted.", "type": "string" }, "page_url": { "type": "string" }, "selector": { "type": "string" }, "useragent": { "properties": { "browser": { "properties": { "major": { "type": "string" }, "name": { "type": "string" } }, "type": "object" }, "os": { "properties": { "name": { "type": "string" }, "version": { "type": "string" } }, "type": "object" } }, "type": "object" }, "viewport": { "properties": { "height": { "type": "integer" }, "width": { "type": "integer" } }, "type": "object" } } }, { "type": "object", "title": "SnapshotMobileMetadata", "properties": { "app_name": { "type": "string" }, "app_version": { "type": "string" }, "captured_time": { "type": "string", "description": "ISO 8601 formatted." }, "device_model": { "type": "string" }, "device_os": { "type": "string" }, "resolution": { "type": "string" } } } ], "type": "object" }, "site": { "readOnly": true, "type": "integer" }, "snapshot_download_url": { "readOnly": true, "type": "string" }, "snapshot_location": { "readOnly": true, "type": "string" }, "source": { "readOnly": true, "enum": [ "triggered", "automated", "customer_provided" ], "type": "string" }, "status": { "readOnly": true, "enum": [ "processing", "success", "failure" ], "type": "string" }, "status_message": { "readOnly": true, "type": "string" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "required": [ "id", "status", "snapshot_location", "account", "site", "is_manual", "is_test", "source", "created_time", "updated_time" ] } } } } } }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_locations-id-snapshots-snapshotid-archive.md # Archives a Snapshot. Requires **manage** permissions for Snapshots. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "tags": [ { "name": "Snapshots" } ], "paths": { "/locations/{id}/snapshots/{snapshotId}/archive": { "post": { "tags": [ "Snapshots" ], "summary": "Archives a Snapshot.", "description": "Requires **manage** permissions for Snapshots.", "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } }, { "in": "path", "name": "snapshotId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "archived_reason": { "type": "string" } } } } } }, "responses": { "200": { "description": "Success.", "content": { "application/json": { "schema": { "properties": { "data": { "type": "object", "properties": { "id": { "type": "string" } } } }, "type": "object" } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_locations-id-snapshots-upload.md # Upload a manually captured Snapshot. Requires **upload** or **manage** permissions. `captured_time` defaults to now. If `captured_time` is supplied it must be in the past. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "tags": [ { "name": "Snapshots" } ], "paths": { "/locations/{id}/snapshots/upload": { "post": { "tags": [ "Snapshots" ], "summary": "Upload a manually captured Snapshot.", "description": "Requires **upload** or **manage** permissions. `captured_time` defaults to now. If `captured_time` is supplied it must be in the past.", "parameters": [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "multipart/form-data": { "schema": { "type": "object", "properties": { "snapshot": { "type": "string", "format": "binary" }, "captured_time": { "type": "string" } } } } } }, "responses": { "201": { "description": "Created.", "content": { "application/json": { "schema": { "properties": { "data": { "title": "Snapshot", "type": "object", "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_by": { "readOnly": true, "type": "integer" }, "archived_reason": { "type": "string" }, "captured_time": { "description": "ISO 8601 formatted.", "type": "string" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "expiration_time": { "readOnly": true, "type": "string" }, "id": { "readOnly": true, "type": "string" }, "image_path": { "readOnly": true, "type": "string" }, "is_manual": { "readOnly": true, "type": "boolean" }, "is_test": { "type": "boolean" }, "metadata": { "oneOf": [ { "type": "object", "title": "SnapshotWebMetadata", "properties": { "captured_time": { "description": "ISO 8601 formatted.", "type": "string" }, "page_url": { "type": "string" }, "selector": { "type": "string" }, "useragent": { "properties": { "browser": { "properties": { "major": { "type": "string" }, "name": { "type": "string" } }, "type": "object" }, "os": { "properties": { "name": { "type": "string" }, "version": { "type": "string" } }, "type": "object" } }, "type": "object" }, "viewport": { "properties": { "height": { "type": "integer" }, "width": { "type": "integer" } }, "type": "object" } } }, { "type": "object", "title": "SnapshotMobileMetadata", "properties": { "app_name": { "type": "string" }, "app_version": { "type": "string" }, "captured_time": { "type": "string", "description": "ISO 8601 formatted." }, "device_model": { "type": "string" }, "device_os": { "type": "string" }, "resolution": { "type": "string" } } } ], "type": "object" }, "site": { "readOnly": true, "type": "integer" }, "snapshot_download_url": { "readOnly": true, "type": "string" }, "snapshot_location": { "readOnly": true, "type": "string" }, "source": { "readOnly": true, "enum": [ "triggered", "automated", "customer_provided" ], "type": "string" }, "status": { "readOnly": true, "enum": [ "processing", "success", "failure" ], "type": "string" }, "status_message": { "readOnly": true, "type": "string" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "required": [ "id", "status", "snapshot_location", "account", "site", "is_manual", "is_test", "source", "created_time", "updated_time" ] } } } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_locations.md # Create a new Snapshot location Requires **manage** permissions for Snapshots. A Snapshot Location can be either a `Mobile` or `Web` location depending on the `location_type` body parameter # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "tags": [ { "name": "Snapshots" } ], "paths": { "/locations": { "post": { "description": "Requires **manage** permissions for Snapshots. A Snapshot Location can be either a `Mobile` or `Web` location depending on the `location_type` body parameter", "summary": "Create a new Snapshot location", "tags": [ "Snapshots" ], "requestBody": { "content": { "application/json": { "schema": { "oneOf": [ { "required": [ "capture_url", "location_type", "key", "name" ], "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" } ], "properties": { "capture_attempts": { "type": "integer", "readOnly": true }, "capture_url": { "type": "string" }, "error_message": { "type": "string", "readOnly": true }, "frequency": { "enum": [ "daily", "weekly", "monthly", "never" ], "title": "Frequency", "type": "string" }, "location_type": { "enum": [ "web" ], "title": "LocationTypeWeb", "type": "string" }, "platform": { "enum": [ "desktop", "ios", "android" ], "title": "Platforms", "type": "string" } }, "title": "WebLocation", "type": "object" }, { "required": [ "key", "name", "application_id", "application_name", "location_type" ], "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" }, { "properties": { "application_id": { "type": "string" }, "application_name": { "type": "string" }, "mobile_os": { "description": "Default 'ios'", "enum": [ "ios", "android" ], "title": "Mobile OS", "type": "string" } } }, { "properties": { "location_type": { "enum": [ "mobile_app" ], "title": "LocationTypeMobile", "type": "string" } } } ], "title": "MobileLocation", "type": "object" } ] }, "examples": { "web": { "summary": "Web Snapshot location.", "value": { "name": "example location", "key": "example-key", "capture_url": "https://example.com", "description": "Example app login.", "platform": "desktop", "frequency": "weekly" } }, "mobile": { "summary": "Mobile app Snapshot location.", "value": { "name": "example location", "key": "example-key", "description": "Example app login.", "application_id": "example.app", "application_name": "Example App", "mobile_os": "ios" } } } } }, "required": true }, "responses": { "201": { "description": "Created.", "content": { "application/json": { "schema": { "oneOf": [ { "required": [ "platform", "frequency", "published", "published_time", "status", "location_type", "key", "name", "capture_url", "created_time", "updated_time", "created_by", "updated_by", "site", "account", "id" ], "title": "WebLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" } ], "properties": { "capture_attempts": { "type": "integer", "readOnly": true }, "capture_url": { "type": "string" }, "error_message": { "type": "string", "readOnly": true }, "frequency": { "enum": [ "daily", "weekly", "monthly", "never" ], "title": "Frequency", "type": "string" }, "location_type": { "enum": [ "web" ], "title": "LocationTypeWeb", "type": "string" }, "platform": { "enum": [ "desktop", "ios", "android" ], "title": "Platforms", "type": "string" } }, "type": "object" }, { "required": [ "mobile_os", "published", "published_time", "status", "location_type", "key", "name", "application_id", "application_name", "created_by", "updated_by", "site", "account", "created_time", "updated_time", "id" ], "title": "MobileLocationResponse", "allOf": [ { "properties": { "account": { "readOnly": true, "type": "integer" }, "archived": { "readOnly": true, "type": "boolean" }, "archived_reason": { "readOnly": true, "type": "string" }, "created_by": { "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "description": { "type": "string" }, "id": { "readOnly": true, "type": "string" }, "key": { "type": "string" }, "last_acceptance": { "readOnly": true, "type": "string" }, "name": { "type": "string" }, "published": { "readOnly": true, "type": "boolean" }, "published_by": { "readOnly": true, "type": "integer" }, "published_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" }, "site": { "readOnly": true, "type": "integer" }, "status": { "readOnly": true, "type": "string" }, "updated_by": { "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "readOnly": true, "type": "string" } }, "title": "Location", "type": "object" }, { "properties": { "application_id": { "type": "string" }, "application_name": { "type": "string" }, "mobile_os": { "description": "Default 'ios'", "enum": [ "ios", "android" ], "title": "Mobile OS", "type": "string" } } }, { "properties": { "location_type": { "enum": [ "mobile_app" ], "title": "LocationTypeMobile", "type": "string" } } } ], "type": "object" } ] } } } }, "400": { "description": "Bad request." }, "403": { "description": "Forbidden." }, "409": { "description": "Already exists." }, "422": { "description": "Unprocessable." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_sites-site-id-contract.md # Create a contract To create a Contract, you must specify a site ID, which will be part of the URL. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/sites/{site_id}/contract": { "post": { "summary": "Create a contract", "description": "To create a Contract, you must specify a site ID, which will be part of the URL.", "tags": [ "Sites" ], "parameters": [ { "in": "path", "name": "site_id", "description": "The ID of your site.", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "requestBody": { "content": { "application/json": { "schema": { "title": "CreateContractRequest", "allOf": [ { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] }, { "type": "object", "properties": { "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } } } ] } } } }, "responses": { "201": { "description": "Created Contract.", "content": { "application/json": { "schema": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } } } }, "400": { "description": "Bad request." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_sites-site-id-groups.md # Create a Group in a Site Create a Group in the specified Site # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/sites/{site_id}/groups": { "post": { "summary": "Create a Group in a Site", "description": "Create a Group in the specified Site", "tags": [ "Sites", "Groups" ], "parameters": [ { "in": "path", "name": "site_id", "required": true, "schema": { "type": "integer", "format": "integer" } } ], "requestBody": { "content": { "application/json": { "schema": { "title": "Group", "type": "object", "properties": { "id": { "type": "integer", "readOnly": true, "default": 0, "example": 1 }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "paused": { "type": "boolean", "readOnly": true }, "paused_by": { "type": "integer", "readOnly": true, "example": 5 }, "paused_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "pending_changes": { "type": "boolean", "readOnly": true }, "name": { "type": "string", "example": "Login Terms" }, "key": { "type": "string", "example": "group-0rsabrt5a" }, "description": { "type": "string", "example": "This is a description of the Login Terms group." }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other groups.", "items": { "type": "string" } }, "type": { "title": "GroupType", "type": "string", "enum": [ "browsewrap", "clickwrap", "form", "policy" ] }, "style": { "title": "GroupStyle", "type": "string", "enum": [ "floating", "full", "scroll", "checkbox", "combined", "embedded" ] }, "custom_styles": { "type": "string", "description": "Custom CSS styles to apply to the embedded clickwrap group." }, "rendered_by_user": { "type": "boolean" }, "expect_agreed_click": { "type": "boolean" }, "expect_disagreed": { "type": "boolean" }, "container_selector": { "type": "string", "description": "The CSS selector for the group container element." }, "signer_id_selector": { "type": "string", "description": "The CSS selector for the input element containing the signer ID value." }, "form_selector": { "type": "string", "description": "The CSS selector for the form element the group belongs to." }, "block_submission": { "type": "boolean", "default": true }, "force_scroll": { "type": "boolean", "default": false }, "auto_run": { "type": "boolean", "default": true }, "display_all": { "type": "boolean", "default": true }, "alert_message": { "type": "string", "default": "Before you can submit this form, you must accept all of our legal contracts." }, "acceptance_language": { "type": "string", "description": "The language to display alongside the group checkbox." }, "confirmation_email": { "type": "boolean", "default": false }, "hide_record_summary": { "type": "boolean", "default": false }, "opt_out_language": { "type": "string" }, "target_jurisdictions": { "type": "array", "items": { "type": "string" } }, "target_selector": { "type": "string" }, "position": { "title": "BrowsewrapPosition", "type": "string", "enum": [ "auto", "left", "right", "center" ] }, "open_legal_center": { "type": "boolean", "default": true }, "always_visible": { "type": "boolean", "default": false }, "badge_text": { "type": "string", "description": "The text to display on the floating browsewrap badge." }, "instructions": { "type": "string" }, "protected_url": { "type": "boolean" }, "redirect_url": { "type": "string" }, "contracts": { "type": "array", "items": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } }, "validate_unique_classifications": { "type": "array", "items": { "type": "string" } }, "dynamic": { "type": "boolean", "default": false }, "render_data": { "type": "object" }, "notification_email": { "type": "string", "description": "The email address to send internal notifications to when a group is accepted." }, "published_endpoint": { "type": "string", "description": "The URL to the published group.", "readOnly": true }, "snapshots_enabled": { "type": "boolean" }, "snapshot_config": { "type": "string" }, "snapshot": { "title": "GroupSnapshot", "type": "object", "properties": { "image_path": { "type": "string" }, "last_captured_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "latest": { "type": "string" } } }, "snapshot_locations": { "type": "array", "items": { "type": "string" } }, "is_associated_with_location": { "type": "boolean", "readOnly": true }, "download_contracts": { "type": "boolean", "default": false } } } } } }, "responses": { "201": { "description": "Created Group", "content": { "application/json": { "schema": { "title": "Group", "type": "object", "properties": { "id": { "type": "integer", "readOnly": true, "default": 0, "example": 1 }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "paused": { "type": "boolean", "readOnly": true }, "paused_by": { "type": "integer", "readOnly": true, "example": 5 }, "paused_time": { "type": "string", "readOnly": true, "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "pending_changes": { "type": "boolean", "readOnly": true }, "name": { "type": "string", "example": "Login Terms" }, "key": { "type": "string", "example": "group-0rsabrt5a" }, "description": { "type": "string", "example": "This is a description of the Login Terms group." }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other groups.", "items": { "type": "string" } }, "type": { "title": "GroupType", "type": "string", "enum": [ "browsewrap", "clickwrap", "form", "policy" ] }, "style": { "title": "GroupStyle", "type": "string", "enum": [ "floating", "full", "scroll", "checkbox", "combined", "embedded" ] }, "custom_styles": { "type": "string", "description": "Custom CSS styles to apply to the embedded clickwrap group." }, "rendered_by_user": { "type": "boolean" }, "expect_agreed_click": { "type": "boolean" }, "expect_disagreed": { "type": "boolean" }, "container_selector": { "type": "string", "description": "The CSS selector for the group container element." }, "signer_id_selector": { "type": "string", "description": "The CSS selector for the input element containing the signer ID value." }, "form_selector": { "type": "string", "description": "The CSS selector for the form element the group belongs to." }, "block_submission": { "type": "boolean", "default": true }, "force_scroll": { "type": "boolean", "default": false }, "auto_run": { "type": "boolean", "default": true }, "display_all": { "type": "boolean", "default": true }, "alert_message": { "type": "string", "default": "Before you can submit this form, you must accept all of our legal contracts." }, "acceptance_language": { "type": "string", "description": "The language to display alongside the group checkbox." }, "confirmation_email": { "type": "boolean", "default": false }, "hide_record_summary": { "type": "boolean", "default": false }, "opt_out_language": { "type": "string" }, "target_jurisdictions": { "type": "array", "items": { "type": "string" } }, "target_selector": { "type": "string" }, "position": { "title": "BrowsewrapPosition", "type": "string", "enum": [ "auto", "left", "right", "center" ] }, "open_legal_center": { "type": "boolean", "default": true }, "always_visible": { "type": "boolean", "default": false }, "badge_text": { "type": "string", "description": "The text to display on the floating browsewrap badge." }, "instructions": { "type": "string" }, "protected_url": { "type": "boolean" }, "redirect_url": { "type": "string" }, "contracts": { "type": "array", "items": { "title": "Contract", "type": "object", "properties": { "id": { "readOnly": true, "type": "integer", "example": 2 }, "account": { "readOnly": true, "type": "integer", "example": 2 }, "site": { "readOnly": true, "type": "integer", "example": 2 }, "created_by": { "type": "integer", "readOnly": true, "example": 2 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 2 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 2 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "archived": { "type": "boolean", "readOnly": true }, "archived_by": { "type": "integer", "readOnly": true, "example": 2 }, "archived_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 2 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "protected": { "type": "boolean", "readOnly": true }, "private": { "type": "boolean", "readOnly": true }, "public": { "type": "boolean", "description": "The status of allowing the contract to be published to a legal center or be added to a Group.", "default": false }, "shared": { "type": "boolean" }, "title": { "type": "string", "description": "The title of the contract.", "example": "Portal Terms of Use" }, "key": { "type": "string", "example": "template-0rnbcrv3g" }, "description": { "type": "string", "example": "This is a description of the Terms of Use" }, "classification": { "type": "string", "example": "privacy_policy" }, "clm_record_sync": { "title": "CLMRecordSync", "type": "object", "properties": { "enabled": { "type": "boolean" }, "record_type": { "type": "string", "example": "clickwrap" } } }, "countries": { "type": "array", "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "items": { "type": "string" }, "example": [ "ru-RU" ] }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "ContractType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "tags": { "type": "array", "description": "The tags to uniquely identify or easily filter from other contracts.", "items": { "type": "string" } }, "latest_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "published_version": { "type": "string", "example": "55dccf164e10cbd8454d7951", "readOnly": true }, "render_data": { "type": "object" }, "language_direction": { "title": "ContractLanguageDirection", "type": "string", "enum": [ "auto", "rtl" ] }, "used_in": { "type": "array", "items": { "title": "ContractUsedIn", "type": "string", "enum": [ "embedded_contract", "standardized_contract", "personalized_contract", "legal_center" ] } } }, "required": [ "title" ] } }, "validate_unique_classifications": { "type": "array", "items": { "type": "string" } }, "dynamic": { "type": "boolean", "default": false }, "render_data": { "type": "object" }, "notification_email": { "type": "string", "description": "The email address to send internal notifications to when a group is accepted." }, "published_endpoint": { "type": "string", "description": "The URL to the published group.", "readOnly": true }, "snapshots_enabled": { "type": "boolean" }, "snapshot_config": { "type": "string" }, "snapshot": { "title": "GroupSnapshot", "type": "object", "properties": { "image_path": { "type": "string" }, "last_captured_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "latest": { "type": "string" } } }, "snapshot_locations": { "type": "array", "items": { "type": "string" } }, "is_associated_with_location": { "type": "boolean", "readOnly": true }, "download_contracts": { "type": "boolean", "default": false } } } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_versions-version-id-fields.md # Create Field on a Version Note: the Version must be in a draft state. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/versions/{version_id}/fields": { "post": { "summary": "Create Field on a Version", "description": "Note: the Version must be in a draft state.\n", "tags": [ "Versions" ], "parameters": [ { "in": "path", "name": "version_id", "description": "The unique ID of the Contract Version.", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } } } }, "responses": { "200": { "description": "Created Field", "content": { "application/json": { "schema": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/post_versions-version-id-publish.md # Publish a Version Publish a Version by Version ID # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/versions/{version_id}/publish": { "post": { "summary": "Publish a Version", "tags": [ "Versions" ], "parameters": [ { "in": "path", "name": "version_id", "description": "The unique ID of the Contract Version.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Published Version", "content": { "application/json": { "schema": { "title": "Version", "type": "object", "properties": { "id": { "readOnly": true, "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "account": { "type": "integer", "readOnly": true, "example": 1 }, "site": { "type": "integer", "readOnly": true, "example": 1 }, "contract": { "type": "integer", "readOnly": true, "example": 1 }, "version_number": { "type": "integer", "readOnly": true, "example": 2 }, "minor_version_number": { "type": "integer", "readOnly": true, "example": 1 }, "full_version_number": { "type": "string", "example": "1.0", "readOnly": true }, "is_major_version": { "type": "boolean" }, "major_version": { "type": "string", "readOnly": true, "example": "5d8ba89039c713395bf0958b" }, "created_by": { "type": "integer", "readOnly": true, "example": 5 }, "created_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "updated_by": { "type": "integer", "readOnly": true, "example": 5 }, "updated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "editor_version": { "title": "EditorVersion", "type": "string", "enum": [ "classic", "override_classic", "2_0" ] }, "deleted": { "type": "boolean", "readOnly": true }, "deleted_by": { "type": "integer", "readOnly": true, "example": 5 }, "deleted_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "published": { "type": "boolean", "readOnly": true }, "published_by": { "type": "integer", "readOnly": true, "example": 5 }, "published_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "scheduled_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "scheduled_by": { "type": "integer", "readOnly": true, "example": 5 }, "effective_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "deprecated_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "effective_until_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted." }, "title": { "type": "string", "description": "The title of the Version.", "example": "Portal Terms of Use" }, "body": { "type": "string", "description": "The body of the Version. Note: accepts escaped HTML.\n", "example": "

Updated Terms of Use

Agreement Content

" }, "protected": { "type": "boolean", "readOnly": true }, "location": { "type": "string", "example": "https://vault.pactsafe.io/s/25b2b173-632a-4227-9877-31d2109d8c98/versions/57e3ef5a26008d7c5c9c9171.pdf", "readOnly": true }, "download_endpoint": { "type": "string", "example": "s/3652e4b9-a327-430c-8ceb-c8f68a2bbd24/contracts/491263.pdf", "readOnly": true }, "type": { "allOf": [ { "title": "VersionType", "type": "string", "enum": [ "html", "pdf" ] } ], "readOnly": true }, "dynamic": { "type": "boolean", "readOnly": true }, "status": { "allOf": [ { "title": "VersionStatus", "type": "string", "enum": [ "draft", "translating", "published", "deprecated" ] } ], "readOnly": true }, "processing": { "type": "boolean", "readOnly": true }, "pages": { "type": "integer", "readOnly": true }, "change_summary": { "type": "string", "description": "An optional summary of changes made to the Version if necessary.", "example": "Added an arbitration clause." }, "notify_signers": { "deprecated": true, "type": "boolean" }, "text": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "fields": { "type": "array", "description": "The fields that exist on the Version object.", "items": { "title": "FormField", "type": "object", "required": [ "name", "type", "assignment_value" ], "properties": { "id": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c", "readOnly": true }, "name": { "type": "string", "description": "The name of the field." }, "label": { "type": "string", "description": "The label of the field." }, "type": { "title": "FormFieldType", "description": "The type of field.", "type": "string", "enum": [ "text", "checkbox", "date", "signature", "dropdown", "attachment", "acceptance_date", "initials" ] }, "required": { "type": "boolean", "description": "Whether the field is required to be filled prior to acceptance." }, "input_value": { "type": "string", "readOnly": true }, "options": { "type": "string", "readOnly": true }, "locations": { "type": "array", "readOnly": true, "items": { "type": "object" } }, "assigned_to": { "type": "string", "readOnly": true }, "complete": { "type": "boolean", "readOnly": true }, "completed_time": { "type": "string", "example": "2020-07-21T15:34:30.051Z", "description": "ISO 8601 formatted.", "readOnly": true }, "completed_value": { "type": "string", "readOnly": true }, "default_value": { "type": "string", "description": "A default value that can be applied to the field." }, "assignment_value": { "title": "FormFieldAssignmentType", "description": "Whether the field is assigned to the Sender or the Signer.", "type": "string", "enum": [ "signer", "sender" ] }, "read_only": { "type": "boolean", "description": "Whether field field can be changed or not. This is typically only used in scenarios where the field has a default value." }, "secure": { "type": "boolean", "readOnly": true }, "secure_value": { "type": "string", "readOnly": true }, "locked": { "type": "boolean", "readOnly": true }, "persona": { "description": "The Signer Role to use when creating the field.", "type": "string" }, "is_trigger": { "type": "boolean" }, "trigger_field": { "type": "string", "example": "5e8c6ecc51289e1e22816d6c" }, "trigger_match_value": { "type": "string" } } } }, "tokens": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "render_data": { "type": "object", "example": { "testing": true } }, "merge_fields": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "56380927e143dc236f15ea78", "5637e914e143dc236f15ea57" ] }, "merge_data": { "type": "object", "readOnly": true }, "thumbnail_location": { "type": "string", "readOnly": true, "example": "s/25b2b173-632a-4227-9877-31d2109d8c98/thumbnails/documents/4/versions/5639273be8e6284913a0c5b7/preview.png" }, "classification": { "type": "string", "readOnly": true, "example": "privacy_policy" }, "countries": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "RU" ] }, "locales": { "type": "array", "readOnly": true, "items": { "type": "string" }, "example": [ "ru-RU" ] }, "tags": { "type": "array", "readOnly": true, "items": { "type": "string" } }, "language_direction": { "type": "string", "readOnly": true }, "body_language": { "type": "string", "description": "ISO 639-1 locale code indicating the language of the contract text", "example": "fr" } }, "required": [ "title" ] } } } }, "400": { "description": "Bad request." }, "401": { "description": "The requester is unauthorized." }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } } } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/prompting-your-user-on-login.md # Checking Acceptance on Login ## Overview As a company grows and adapts to changing regulatory landscapes, it must also update its agreements. Ensuring that users/customers have accepted the latest version of the terms becomes very important. Ironclad Clickwrap makes it easy to check acceptance status and present your clickwrap to users that haven't accepted the latest agreements. Keep reading to find out how this works with the JavaScript Library and/or Activity API. ## Requirements To get started, you'll need to ensure that you have the following: * Ironclad Clickwrap Site Access ID. More info in the [Authentication](https://clickwrap-developer.ironcladapp.com/docs/authentication-2) page. * Group Key from a **published** [Ironclad Clickwrap Group](https://support.ironcladapp.com/hc/en-us/articles/13622003789207-Create-and-Manage-Clickwrap-Groups) that contains published contract templates. ## Checking Acceptance Status ### Using the JavaScript Library > 🚧 Required Settings > > The Clickwrap Group must have `display_all` set to false. The Group setting `display_all` must be disabled. This can be [configured in the Ironclad Clickwrap web app](https://support.ironcladapp.com/hc/en-us/articles/13622003789207-Create-and-Manage-Clickwrap-Groups) or when loading the Group via the JavaScript Library. Once loaded, the JavaScript Library will automatically listen for the `signer_id` attribute to be set (whether manually or via a specified `signer_id_selector` HTML element). This `signer_id` is used to query whether the user has accepted the [latest major versions](https://support.ironcladapp.com/hc/en-us/articles/12448331891223-Versions-major-versus-minor-) of the contracts in the group. Any and all contracts in the group whose latest major version this user has not accepted will be displayed on the page. As an illustration, your configuration may look something like this: ```javascript // The Ironclad Clickwrap Site Access ID (located in your settings). var siteId = '1e8ddd9d-f32c-4dc7-9c13-62095e6d4317'; // The Ironclad Clickwrap Group key for a published group. var groupKey = 'clickwrap-example-combined'; // The element's ID where we want the clickwrap to show. var clickwrapElementid = 'contracts-container'; // The input field's ID that will be used to pass as the signer id. var signerIdElementId = 'formEmailAddress'; // Create the Ironclad Clickwrap site. _ps('create', siteId, { test_mode: true, // Allows you to clear test data from Ironclad Clickwrap. }); /** * Load the Ironclad Clickwrap group with the specific Group Key * and any additional options. */ _ps('load', groupKey, { container_selector: clickwrapElementid, display_all: false, // We don't want to display unless they haven't accepted. signer_id_selector: signerIdElementId // Listening for the Signer Id to be entered in a form element }); ``` ### Using the Activity API To check the acceptance status using the Activity API, you'll need to have: * A Site Access ID (located in your Site settings) * A Group Key (located when creating and configuring a Group) * A Signer ID to check The example below takes the following approach: 1. Listen to when a form is submitted and then handle using a function. 2. Upon form submission, a signer ID is collected and passed to a function that calls the Ironclad Clickwrap API [latest endpoint](https://clickwrap-developer.ironcladapp.com/reference/get-the-latest-versions-signed) at `https://pactsafe.io/latest` with the site access id, the group key, and the signer ID as URL params. 3. The response is then checked to see if any of the present Contract IDs have not been accepted. A `false` value indicates that the given signer has not yet accepted the latest published [major version](https://support.ironcladapp.com/hc/en-us/articles/12448331891223-Versions-major-versus-minor-) of the contract. With the response, you can then send a user to another page to review/accept the contracts or whatever other behavior fits your use case best. > 🚧 Example Only Code > > Please note that the example code is for demonstration purposes only. Your implementation will most likely be different than what is shown here. ```javascript // The Ironclad Clickwrap Site Access ID (located in your settings). var siteId = "1e8ddd9d-f32c-4dc7-9c13-62095e6d4317"; // The Ironclad Clickwrap Group key for a published group. var groupKey = "clickwrap-example-combined"; // The input field's ID that will be used to pass as the signer id. var signerIdElementId = "formEmailAddress"; var submitButton; function checkPactSafeAPI(signerIdValue) { var url = 'https://pactsafe.io/latest?sid=' + siteId + '&gkey=' + groupKey + '&sig=' + signerIdValue; fetch(url) .then(response => response.json()) .then(data => { /* The response may look like the following: { 92928: false, 92931: true } Knowing that a contract hasn't been accepted, we can then appropriately handle the next step, which may be sending the user to another page to accept the contract. */ }) .catch(err => { alert(err); }) } function handleFormSubmission(event) { event.preventDefault(); // Grab the current signer ID field (this case an email address). var signerIdField = document.getElementById(signerIdElementId); if (!signerIdField) return; // If you don't have a signer id field here, there may be a problem. var signerIdValue = signerIdField.value; // Only continue if the field has a value. if (signerIdValue) { checkPactSafeAPI(signerIdValue); } } function handleInputChange() { var emailAddressField = document.getElementById('formEmailAddress'); var passwordField = document.getElementById('formPassword'); if (!emailAddressField || !passwordField) submitButton.disabled = true; if (emailAddressField.value === "" || passwordField.value === "") submitButton.disabled = true; else submitButton.disabled = false; } // In this example, the DOM is ready. In your environment, you // may need to listen for the DOM being ready. var pageForm = document.getElementById('login-form'); if (pageForm) pageForm.addEventListener('submit', function(event) { handleFormSubmission(event); }, true); // Hold reference of submit button submitButton = document.getElementById('submitButton'); // Add fields listeners var emailAddressField = document.getElementById('formEmailAddress'); var passwordField = document.getElementById('formPassword'); if (emailAddressField) emailAddressField.addEventListener('input', function() { handleInputChange() }); if (passwordField) passwordField.addEventListener('input', function() { handleInputChange() }); ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/react-sdk.md # React SDK ## Features Automatically loads the Ironclad Clickwrap JavaScript Library into your app so all you have to do is call `_ps` to use the [Ironclad Clickwrap JavaScript library](https://developer.pactsafe.com/docs/get-to-know-our-javascript-library). ### PSClickWrap Component * Renders a clickwrap group by providing a site access ID and group key * Render clickwrap groups dynamically using a filter to specify template ID's and/or tags * Dynamically add data to contracts by passing in a custom `render_data` object * Ability to override properties set within the Ironclad Clickwrap App's group configuration such as: * Clickwrap style using the `clickWrapStyle` prop * Signer ID selector using the `signerIdSelector` prop * Displaying all contracts using the `displayAll` prop * and more! ([See more detailed documentation on available PSClickWrap props here](#props)) * Ability to hook into events fired by the Snippet using function props ([See documentation on PSClickwrap callback props here](#callback-props)) ## Demo & Examples [Check out a live demo of the PSClickwrap here](https://pactsafe.github.io/pactsafe-react-sdk/) ### PSClickWrap ![PSClickCrap](https://github.com/pactsafe/pactsafe-react-sdk/raw/master/images/psclickwrap.gif "PSClickWrap") To build the example locally (after cloning this repo from Github), you must first add your Ironclad Clickwrap Site Access ID by creating a `.env` file in the root directory and add the following contents: ``` PACTSAFE_ACCESS_ID= ``` After doing this, you need to create a clickwrap group with the group key `example-web-group`. In your example clickwrap group, if you\ want the render data to work properly, create three tokens in a template within the `example-web-group` group with the API field names to be: `user_token_value`, `another_token_value`, and `last_token_value`. [Some helpful information on creating templates with render data can be found here.](https://clickwrap-developer.ironcladapp.com/docs/how-to-use-dynamic-contracts-with-the-javascript-library)\ (Note: You shouldn't have to write any javascript to get the demo to work! When implementing yourself, the React SDK uses the `dynamic` and `renderData` props to handle rendering of dynamic contracts instead of having to make `_ps` calls.) After completing these steps, the demo should load as the online example does by running: ``` npm install npm start ``` Then open [`http://localhost:3000`](http://localhost:3000) in a browser. ## Installation The easiest way to use pactsafe-react-sdk is to install it from NPM ``` npm install @pactsafe/pactsafe-react-sdk --save ``` You can also directly download the source files from [unpkg](https://unpkg.com/@pactsafe/pactsafe-react-sdk@2.0.0/) to link to the source files directly or download the source from Github and build it yourself. The following can be found in the project's root directory, as well as compiled using `npm run build`: * A CommonJS build in `lib/` * An ES modules build in `es/` (enabled by default/without configuration using `npm install`) * UMD development and production builds in `/umd` ## Usage #### Using PSClickWrap In order to use the PSClickWrap, you must specify a signer ID selector that corresponds to the ID of an `` field on the page that will identify the signer (usually an email field). This ID should then be passed as the `signerIdSelector` prop to the PSClickWrap component: ```JSX import { PSClickWrap } from '@pactsafe/pactsafe-react-sdk' ... ``` Replace with `YOUR_PACTSAFE_ACCESS_ID_HERE` with your Ironclad Clickwrap Site Access ID found [here](https://app.pactsafe.com/settings/account) Replace `YOUR_GROUP_KEY_HERE` with your group's key found within your [Ironclad Clickwrap Group's configuration](https://app.pactsafe.com/groups) Pass in any additional options using props on the `PSClickWrap` component. You can hook into events using the triggered event callback props described here: ([See documentation on PSClickwrap callback props here](#callback-props)). *** ## Props ### PSClickWrap Props (*Note you may have to scroll to the right to see the default value*) | Prop | Description | Type | Required? | Default | | | :------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------- | :------------------------------------------- | :----------------------------------------------- | :- | | `acceptanceLanguage` | Override the acceptance language specified in the Ironclad Clickwrap App's UI. | string | No | Value specified in Ironclad Clickwrap Group's UI | | | `accessId` | Ironclad Clickwrap Site Access ID | string | Yes, if `injectSnippetOnly` is not passed | undefined | | | `clickWrapStyle` | Override the clickwrap style specified in the Ironclad Clickwrap Group Interface | string.oneOf\[`'full'`, `'scroll'`, `'checkbox'`, `'combined'`, `'embedded'`] | No | Value specified in Ironclad Clickwrap Group's UI | | | `confirmationEmail` | Override whether to send a confirmation email to the signer upon contract acceptance | bool | No | Value specified in Ironclad Clickwrap Group's UI | | | `confirmationEmailSubject` | Set the subject line of the confirmation email | string | No | "You've accepted an agreement" | | | `containerId` | The div ID that will contain your clickwrap. You should override this if you plan on displaying more than one contract on a page. | string | No | ps-clickwrap | | | `customData` | Object containing custom keys and values you specify that is added to the metadata on your acceptance. | object | No | undefined | | | `disableSending` | Turn this on if you want to manually send the agreed event instead of it automatically being sent on contract acceptance. [See documentation on manually sending the agreed event here.](https://clickwrap-developer.ironcladapp.com/docs/manually-sending-acceptance) | bool | No | false | | | `displayAll` | Display all contracts in the group immediately. If disabled, a contract will only be displayed if the signer hasn't accepted the latest version. | bool | No | true | | | `displayImmediately` | Display the group's contracts as soon as the Signer ID is available. If disabled, contracts will remain hidden until you call `displayRequired()` | bool | No | true | | | `dynamic` | If you would like to use dynamic render\_data in your contract, you must set this to true. If this is set to true, you MUST also pass an object into the `render_data` prop. | bool | No | false | | | `filter` | Allows you to dynamically load contracts without having to specify a group. Filter must be in the format: `id==123,456` OR `id==12345 and tags==tag1,tag2` OR `tags==tag1,tag2`. [See documentation for more information on using dynamic groups.](https://clickwrap-developer.ironcladapp.com/docs/dynamic-groups-and-how-to-use-them) | string | No, Yes if `groupKey` prop is not passed | undefined | | | `forceScroll` | Disable acceptance until the signer scrolls to the bottom of each contract. | bool | No | Value specified in Ironclad Clickwrap Group's UI | | | `groupKey` | Ironclad Clickwrap group key, this is found within the Ironclad Clickwrap Groups configuration. | string | Yes, unless `filter` prop is passed | undefined | | | `injectSnippetOnly` | Prop to use if you only want to inject the snippet and do not want the SDK to create and initialize a clickwrap for you. | boolean | No | false | | | `psScriptUrl` | If using a custom (or development) version of the ps.js file, pass the file URL in here. You probably won't need to use this. | string | No | '//vault.pactsafe.io/ps.min.js' | | | `backupScriptUrl` | If using a custom (or development) version of the ps.js file, pass the alternative backup URL in here. Otherwise, this will default to the cloudfront backup provided by the ps.js snippet. This is designed to load if the first script (defined in psScriptURL) fails to load | string | No | ''//d3l1mqnl5xpsuc.cloudfront.net/ps.min.js' | | | `renderData` | Object containing the dynamic render data for your contract. [For more information on using dynamic contracts, check out this documentation.](https://clickwrap-developer.ironcladapp.com/docs/how-to-use-dynamic-contracts-with-the-javascript-library) | object | If `dynamic` is set to true | undefined | | | `signerIdSelector` | The ID of the `` element that will be used to identify the signer. | string | Yes | Required Value | | | `signerId` | Use this to set the signer id directly. Note that if this value is tied to a state variable updated via user input, you may hit rate limits if it is updated frequently in a short period of time. To avoid hitting a rate limit, it is best to set the value tied to this prop only when the user's input is complete as opposed to changing this value on a per character basis. | string | No, unless `signerIdSelector` is not passed | undefined | | | `snapshotLocation` | Ironclad Clickwrap Snapshot Location Key, this is found within the Snapshot Location configuration | string | No | undefined | | | `testMode` | Enable this to register any contract acceptances as test data that can be cleared within the Ironclad Clickwrap UI | bool | No | false | | | `allowDisagreed` | Enable this to allow invalid events to be triggered when a signer unchecks a checkbox. | bool | Required to be true if `onInvalid` is passed | Value specified in Ironclad Clickwrap Group's UI | | | `onAll` | See [onAll](#onAll) below | function | No | undefined | | | `onSent` | See [onSent](#onSent) below | function | No | undefined | | | `onRetrieved` | See [onRetrieved](#onRetrieved) below | function | No | undefined | | | `onSet` | See [onSet](#onSet) below | function | No | undefined | | | `onSetSignerId` | See [onSetSignerId](#onSetSignerId) below | function | No | undefined | | | `onValid` | See [onValid](#onValid) below | function | No | undefined | | | `onInvalid` | See [onInvalid](#onInvalid) below | function | No | undefined | | | `onRendered` | See [onRendered](#onRender) below | function | No | undefined | | | `onDisplayed` | See [onDisplayed](#onDisplayed) below | function | No | undefined | | | `onScrolled` | See [onScrolled](#onScrolled) below | function | No | undefined | | | `onScrolledContract` | See [onScrolledContract](#onScrolledContract) below | function | No | undefined | | | `onChecked` | See [onChecked](#onChecked) below | function | No | undefined | | | `onUnchecked` | See [onUnchecked](#onUnchecked) below | function | No | undefined | | | `onError` | See [onError](#onError) below | function | No | undefined | | ## PSClickwrap Triggered Event Callback Props New in v2.0 of the React SDK we are introducing triggered event props. These props are functions that can be passed in as props and are called in response to events that happen after a user interacts with a PSClickwrap component. These function props correspond to the triggered events that can be also created using the \_ps global created by the snippet. [For more information on how triggered events work within the PSSnippet and calling them without the props, you can learn about them here](https://clickwrap-developer.ironcladapp.com/docs/triggered-events-1). By using function props, the component will interact with the `_ps` API for you and clean up after itself when the component is destroyed.\ The demo page contains various callback examples and the corresponding callback events can be observed in the console output. As a quick example of the usage of these, if you wanted to enable a button on a valid clickwrap event, here is example code to do so using the onValid and onInvalid event props: ```JSX import { PSClickWrap } from '@pactsafe/pactsafe-react-sdk' ... class Example extends React.Component { constructor(props){ super(props); this.state = { hasAgreed: false }; } onValid = () => { this.setState({ hasAgreed: true }); } onInvalid = () => { this.setState({ hasAgreed: false }); } render () { return
} } ``` If you do not want to use event callback props, the `_ps` is loaded into the window object for you to access and set event listeners manually. Using the `_ps` global you should be able to do everything listed in our full documentation on the [PS.js library](https://clickwrap-developer.ironcladapp.com/docs/global_ps-object) The list below describes the props names and corresponding Ironclad Clickwrap events: ##
onAll \_ps event: `all` A special event that is triggered when any other event is triggered. The name of the original event is always the first argument passed to the callback function. The rest of the arguments will match whatever arguments were passed to the original event's callback function. ### Callback Arguments | Name | Type | Description | | :---------: | :--------: | :----------------------------------------------------------: | | event | String | The name of the event that was triggered. | | \[arguments] | Array`` | All of the arguments that were passed to the original event. | ## onSent \_ps event: `sent` Triggered when a `send` command has been completed successfully. ### Callback Arguments | Name | Type | Description | | :--------: | :-------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------: | | event\_type | String | The type of action that was sent. Supported values include: 'agreed', 'disagreed', 'displayed', 'visited' and 'updated'. | | parameters | Object | An object containing the contract and group details that were sent. Contains three parameters: 'contracts', 'versions' and 'group'. | | context | Site, BrowsewrapGroup or ClickwrapGroup | The Site or Group object that initiated the send command. | | payload | String | The URL-encoded payload that would have been sent to the Action API. This argument is only present when the prop `disable_sending` is set to true. | ## onRetrieved \_ps event: `retrieved` Triggered when a `retrieved` command has been completed successfully. ### Callback Arguments | Name | Type | Description | | :----------: | :-------------------------------------: | :-----------------------------------------------------------: | | responseJSON | Object | The JSON response body returned by the XMLHttpRequest. | | xhr | XMLHttpRequest | The raw XMLHttpRequest that was sent to the Action API. | | context | Site, BrowsewrapGroup or ClickwrapGroup | The Site or Group object that initiated the retrieve command. | ## onSet \_ps event: `set` Triggered when a parameter is set. *Note:* This event will only be triggered for specific parameters. Supported parameters include: signer\_id, signer\_id\_selector, form\_selector. Since this is an event listener for site level properties, you should only set this on\ one clickwrap on the page if multiple are mounted in order to guarantee the function is idempotent, otherwise it will be called once per clickwrap. ### Callback Arguments | Name | Type | Description | | :-------: | :-------------------------------------: | :------------------------------------------------------: | | parameter | String | The name of the parameter that was set. | | value | String, Number, Object, Function, etc. | The raw XMLHttpRequest that was sent to the Action API. | | context | Site, BrowsewrapGroup or ClickwrapGroup | The Site or Group object on which the parameter was set. | ## onSetSignerId \_ps event: `set:signer_id` Triggered when the signer\_id parameter is set. ### Callback Arguments | Name | Type | Description | | :-----: | :-------------------------------------: | :------------------------------------------------------: | | value | String | The `signer_id` that was set | | context | Site, BrowsewrapGroup or ClickwrapGroup | The Site or Group object on which the parameter was set. | ## onValid \_ps event: `valid` Triggered when all of the contracts in a Group have been accepted by a signer. ### Callback Arguments | Name | Type | Description | | :--------: | :-------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------: | | parameters | Object | An object containing the contracts and versions that belong to the Group. Contains three parameters: 'contracts', 'versions' and 'group' | | context | BrowsewrapGroup or ClickwrapGroup | The Group object that was validated | ## onInvalid \_ps event: `invalid` Triggered when all of the contracts in a Group are no longer accepted by a signer. This event will be triggered if a signer un-checks a contract on a valid Group. Must have `allowDisagreed` as `true` to take effect. ### Callback Arguments | Name | Type | Description | | :--------: | :-------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------: | | parameters | Object | An object containing the contracts and versions that belong to the Group. Contains three parameters: 'contracts', 'versions' and 'group' | | context | BrowsewrapGroup or ClickwrapGroup | The Group object that was invalidated | ## onRendered \_ps event: `rendered` Triggered when a Group object has been rendered. ### Callback Arguments | Name | Type | Description | | :-----: | :------------: | :--------------------------------: | | context | ClickwrapGroup | The Group object that was rendered | ## onDisplayed \_ps event: `displayed` Triggered when a Group object displays a contract. ### Callback Arguments | Name | Type | Description | | :-----: | :------------: | :--------------------------------------------: | | element | HTMLElement | The contract's HTMLElement that was displayed. | | context | ClickwrapGroup | The Group object that displayed the contract | ## onScrolled \_ps event: `scrolled` Triggered when "Force Scroll" has been enabled in your Group Settings (or passed as a prop) and *all* of the contracts in a Group have been scrolled to the bottom of within a "Scroll" or "Embedded" Group style/layout. ### Callback Arguments | Name | Type | Description | | :--------------: | :------------: | :----------------------------------------------------------------: | | contractsElement | Object | The element containing the entire container selector of the group. | | context | ClickwrapGroup | The Group object that had all contracts scrolled to the bottom | ## onScrolledContract \_ps event: `scrolled:contract` Triggered when "Force Scroll" has been enabled in your Group Settings (or passed as a prop) and one of the contracts in a Group has been scrolled to the bottom of a "Scroll" or "Embedded" Group style/layout. ### Callback Arguments | Name | Type | Description | | :----------: | :------------: | :---------------------------------------------------------------------------------: | | contractHTML | Object | An object containing the HTML of the contract that has been scrolled to the bottom. | | group | ClickwrapGroup | The Group object that was scrolled to the bottom | ## onChecked \_ps event: `checked` Triggered when any of the ClickwrapGroup checkboxes is checked. ### Callback Arguments | Name | Type | Description | | :-----: | :------------: | :-------------------------------------------------------------: | | element | Object | An object containing the HTML of the contract that was checked. | | context | ClickwrapGroup | The Group object that was checked. | ## onUnchecked \_ps event: `unchecked` Triggered when any of the ClickwrapGroup checkboxes is unchecked. ### Callback Arguments | Name | Type | Description | | :-----: | :------------: | :---------------------------------------------------------------: | | element | Object | An object containing the HTML of the contract that was unchecked. | | context | ClickwrapGroup | The Group object that was unchecked. | ## onError \_ps event: `error` Triggered when a send or retrieve command encounters an error before being sent. ### Callback Arguments | Name | Type | Description | | :--------: | :--------------------------------------: | :--------------------------------------------------: | | message | String | A message describing why the error occurred. | | event\_type | String | The type of action that was being sent. | | context | Site, BrowsewrapGroup, or ClickwrapGroup | The Site or Group object that initiated the command. | *** ## Development (`src`, `lib` and the build process) [See CONTRIBUTING.md](CONTRIBUTING.md) ## License [MIT License](LICENSE) Copyright © 2019 Ironclad. [npm-badge]: https://img.shields.io/npm/v/@pactsafe/pactsafe-react-sdk.svg [npm]: https://www.npmjs.com/package/@pactsafe/pactsafe-react-sdk --- # Source: https://clickwrap-developer.ironcladapp.com/reference/remove-a-site-1.md # Remove a Site # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/sites/{site_id}": { "delete": { "summary": "Remove a Site", "tags": [ "Sites" ], "operationId": "remove-a-site", "parameters": [ { "name": "site_id", "in": "path", "description": "The ID of the Ironclad Clickwrap Site.", "schema": { "type": "integer", "format": "integer" }, "required": true } ], "responses": { "200": { "description": "A site", "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "properties": { "acceptance_language": { "type": "string" }, "access_id": { "example": "f9a33f92-0c74-4803-abb5-bf7159da7a13", "readOnly": true, "type": "string" }, "account": { "example": 1, "readOnly": true, "type": "integer" }, "adoption_level": { "readOnly": true, "enum": [ "laggard", "majority", "early_adopter", "innovator", "ironclad_clickwrap", "ironclad_clickwrap_v2", "internal_sandbox", "growth", "professional", "enterprise", "legal_centers" ], "title": "Adoption Level", "type": "string" }, "approval_order": { "example": false, "type": "boolean" }, "base_publish_url": { "readOnly": true, "type": "string" }, "company_information": { "properties": { "city": { "example": "Indianapolis", "type": "string" }, "country": { "example": "United States", "type": "string" }, "name": { "example": "New Website, LLC", "type": "string" }, "postal_code": { "example": 46205, "type": "integer" }, "state": { "example": "IN", "type": "string" }, "street": { "example": "6311 Westfield Blvd.", "type": "string" } }, "type": "object" }, "created_by": { "example": 1, "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "deleted": { "example": false, "readOnly": true, "type": "boolean" }, "deleted_by": { "example": 1, "readOnly": true, "type": "integer" }, "deleted_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "disabled": { "example": false, "readOnly": true, "type": "boolean" }, "email_allow_override": { "example": false, "type": "boolean" }, "email_display_name": { "example": "New Website", "type": "string" }, "email_reply_address": { "example": "team@pactsafe.com", "type": "string" }, "enable_allowed_domains": { "example": false, "type": "boolean" }, "enforce_limits": { "example": true, "readOnly": true, "type": "boolean" }, "first_acceptance_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "id": { "example": 1, "readOnly": true, "type": "integer" }, "key": { "example": "new-website", "type": "string" }, "legal_center_url": { "readOnly": true, "type": "string" }, "locale": { "example": "en-US", "type": "string" }, "mobile_acceptance_language": { "default": "Agree", "example": "Agree", "type": "string" }, "mobile_friendly": { "example": true, "type": "boolean" }, "name": { "example": "New Website", "type": "string" }, "primary": { "example": false, "readOnly": true, "type": "boolean" }, "require_signer_verification": { "example": false, "type": "boolean" }, "sandbox": { "example": false, "readOnly": true, "type": "boolean" }, "time_zone": { "example": "America/New_York", "type": "string" }, "updated_by": { "example": 1, "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "url": { "example": "http://wwww.newwebsite.com", "type": "string" }, "verified": { "example": true, "readOnly": true, "type": "boolean" }, "verified_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" } }, "type": "object" } } } } } }, "400": { "description": "Bad request." }, "404": { "description": "Not found." } }, "deprecated": false } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/retrieve-a-signer-by-signer-id-1.md # Retrieve a Signer by Signer ID # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/signers/id:{signer_id}": { "get": { "summary": "Retrieve a Signer by Signer ID", "description": "", "operationId": "retrieve-a-signer-by-signer-id", "tags": [ "Signers" ], "parameters": [ { "name": "signer_id", "in": "path", "description": "The signer ID, URL encoded.", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "200", "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "allOf": [ { "title": "Signer", "type": "object", "properties": { "uuid": { "type": "string", "example": "55e0820564a5846a5a0387c4", "readOnly": true }, "_id": { "type": "string", "readOnly": true }, "account": { "type": "integer", "readOnly": true, "example": 2, "default": 0 }, "site": { "type": "integer", "readOnly": true, "example": 2, "default": 0 }, "name": { "type": "string", "example": "Eric Prugh" }, "email": { "type": "string", "example": "eric@pactsafe.com" }, "email_hash": { "type": "string", "example": "20a9d8f9c7d8415b58ece4621a6517ca", "readOnly": true }, "mobile_number": { "type": "string", "example": "(317) 403-7298" }, "company_name": { "type": "string", "example": "PactSafe" }, "title": { "type": "string", "example": "Person" }, "sendable": { "type": "boolean", "example": true, "default": true, "readOnly": true }, "deliverable": { "title": "Deliverable", "type": "object", "readOnly": true, "properties": { "email": { "type": "boolean", "example": true, "default": true }, "email_status": { "enum": [ "processed", "dropped", "delivered", "deferred", "bounce", "open", "dropped", "click", "spamreport", "unsubscribe", "group_unsubscribe", "group_resubscribe" ], "title": "EmailStatus", "type": "string" }, "mobile_number": { "type": "boolean", "example": true, "default": true }, "mobile_number_status": { "enum": [ "failed", "delivered", "queued", "undelivered", "sent", "Opted out", "landline" ], "title": "MobileNumberStatus", "type": "string" } } }, "created_time": { "type": "string", "example": "2015-08-28T15:45:09.585Z", "readOnly": true }, "updated_time": { "type": "string", "example": "2015-08-28T15:45:09.585Z", "readOnly": true }, "latest_activity_time": { "type": "string", "default": null, "example": "2015-08-28T15:45:09.585Z", "readOnly": true }, "additional_attributes": { "type": "object", "additionalProperties": true, "properties": { "city": { "type": "string", "example": "Indianapolis" }, "mobile_number": { "type": "string", "example": "(317) 403-7298" }, "email": { "type": "string", "example": "eric@pactsafe.com" }, "first_name": { "type": "string", "example": "Eric" }, "last_name": { "type": "string", "example": "Prugh" }, "title": { "type": "string", "example": "Person" }, "company": { "type": "string", "example": "PactSafe" } } }, "last_action": { "readOnly": true, "type": "string", "example": "58b8db7e379e242c5b189d7d" }, "last_downloaded_time": { "type": "string", "default": null, "example": "2015-08-28T15:45:09.585Z", "readOnly": true }, "last_downloaded_by": { "readOnly": true, "type": "integer", "example": 1 }, "source": { "enum": [ "manual", "import", "api", "smartpact" ], "title": "SignerSource", "type": "string", "readOnly": true }, "notify": { "type": "boolean", "example": true, "default": true }, "amber_road": { "readOnly": true, "type": "object", "properties": { "isValid": { "type": "boolean" }, "status": { "type": "string" }, "screened_date": { "type": "string", "example": "2015-08-28T15:45:09.585Z" } } } } }, { "type": "object", "title": "Signer", "properties": { "signer_id": { "type": "string", "example": "eric@pactsafe.com", "readOnly": true }, "test_mode": { "type": "boolean", "example": false, "readOnly": true } } } ] } } } } } }, "404": { "description": "Not found." } }, "deprecated": false } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/retrieve-a-site-1.md # Retrieve a Site A single Site with all of its properties and details. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/sites/{site_id}": { "get": { "summary": "Retrieve a Site", "description": "A single Site with all of its properties and details.", "tags": [ "Sites" ], "operationId": "retrieve-a-site", "parameters": [ { "name": "site_id", "in": "path", "description": "The ID of the Ironclad Clickwrap Site.", "schema": { "type": "integer", "format": "integer" }, "required": true } ], "responses": { "200": { "description": "A site", "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "properties": { "acceptance_language": { "type": "string" }, "access_id": { "example": "f9a33f92-0c74-4803-abb5-bf7159da7a13", "readOnly": true, "type": "string" }, "account": { "example": 1, "readOnly": true, "type": "integer" }, "adoption_level": { "readOnly": true, "enum": [ "laggard", "majority", "early_adopter", "innovator", "ironclad_clickwrap", "ironclad_clickwrap_v2", "internal_sandbox", "growth", "professional", "enterprise", "legal_centers" ], "title": "Adoption Level", "type": "string" }, "approval_order": { "example": false, "type": "boolean" }, "base_publish_url": { "readOnly": true, "type": "string" }, "company_information": { "properties": { "city": { "example": "Indianapolis", "type": "string" }, "country": { "example": "United States", "type": "string" }, "name": { "example": "New Website, LLC", "type": "string" }, "postal_code": { "example": 46205, "type": "integer" }, "state": { "example": "IN", "type": "string" }, "street": { "example": "6311 Westfield Blvd.", "type": "string" } }, "type": "object" }, "created_by": { "example": 1, "readOnly": true, "type": "integer" }, "created_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "deleted": { "example": false, "readOnly": true, "type": "boolean" }, "deleted_by": { "example": 1, "readOnly": true, "type": "integer" }, "deleted_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "disabled": { "example": false, "readOnly": true, "type": "boolean" }, "email_allow_override": { "example": false, "type": "boolean" }, "email_display_name": { "example": "New Website", "type": "string" }, "email_reply_address": { "example": "team@pactsafe.com", "type": "string" }, "enable_allowed_domains": { "example": false, "type": "boolean" }, "enforce_limits": { "example": true, "readOnly": true, "type": "boolean" }, "first_acceptance_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "id": { "example": 1, "readOnly": true, "type": "integer" }, "key": { "example": "new-website", "type": "string" }, "legal_center_url": { "readOnly": true, "type": "string" }, "locale": { "example": "en-US", "type": "string" }, "mobile_acceptance_language": { "default": "Agree", "example": "Agree", "type": "string" }, "mobile_friendly": { "example": true, "type": "boolean" }, "name": { "example": "New Website", "type": "string" }, "primary": { "example": false, "readOnly": true, "type": "boolean" }, "require_signer_verification": { "example": false, "type": "boolean" }, "sandbox": { "example": false, "readOnly": true, "type": "boolean" }, "time_zone": { "example": "America/New_York", "type": "string" }, "updated_by": { "example": 1, "readOnly": true, "type": "integer" }, "updated_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" }, "url": { "example": "http://wwww.newwebsite.com", "type": "string" }, "verified": { "example": true, "readOnly": true, "type": "boolean" }, "verified_time": { "description": "ISO 8601 formatted.", "example": "2023-11-02T15:23:51.007+00:00", "readOnly": true, "type": "string" } }, "type": "object" } } } } } }, "404": { "description": "Not found." } }, "deprecated": false } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/retrieve-last-terms-signed-by-signer.md # Retrieve Last Contracts Signed by Signer ## Overview The [Retrieve Contracts Accepted by Signer](https://clickwrap-developer.ironcladapp.com/reference/get-retrieve-contracts-by-signer-1) call allows you to query the API and pull back what a signer has previously agreed to. The response body will provide a list of Contract IDs and the Version ID accepted by the signer. This can be used to determine if a signer has signed the latest version of a contract. ## Example Code > 🚧 Example Only Code > > Please note that the example code is only for demonstration purposes and may not work in all environments. ```javascript /** * Uses the Fetch API, which is not compatible with all browsers. * Learn more here: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API */ // Uses GET on /retrieve fetch('https://pactsafe.io/retrieve?sid=SITE_ACCESS_ID&sig=ENCODED_SIGNER_ID') .then(response => response.json()) .then(data => { console.log(data); /* The data returned will be a JSON object with keys being the Contract ID and values being the Version ID. Example: { "1604": "5deea00c5d187b2830681313", "1618": "5df00251ef6fb9074d9264ec" } */ }) .catch(err => console.log(err)); ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/retrieve-user-membership-for-a-site-1.md # List all Site Members # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/sites/{site_id}/members": { "get": { "summary": "List all Site Members", "tags": [ "Sites" ], "operationId": "retrieve-user-membership-for-a-site", "parameters": [ { "name": "site_id", "in": "path", "description": "The ID of the Ironclad Clickwrap Site.", "schema": { "type": "integer", "format": "integer" }, "required": true }, { "in": "query", "name": "page", "description": "Page number to offset results for pagination. Defaults to 1.", "schema": { "type": "integer" } }, { "in": "query", "name": "per_page", "schema": { "type": "integer" } }, { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "query", "name": "filter", "description": "Filter activities by the various fields. Note the use of 'and' between the fields. Example: `event_type==agreed and signer_id==claddy@ironcladapp.com`.\n", "schema": { "type": "string" } }, { "in": "query", "name": "sort", "description": "Sort the results of your call by a field in the Request.", "schema": { "type": "string" } }, { "in": "query", "name": "no_count", "schema": { "type": "boolean" } }, { "in": "query", "name": "fields", "schema": { "type": "string" } }, { "in": "query", "name": "lean", "schema": { "type": "boolean" } } ], "responses": { "200": { "description": "An array of members", "content": { "application/json": { "schema": { "type": "object", "allOf": [ { "properties": { "count": { "type": "integer" }, "has_more": { "type": "boolean" }, "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total_count": { "type": "integer" } }, "title": "Collection", "type": "object" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "properties": { "email": { "example": "eric@pactsafe.com", "type": "string" }, "id": { "default": 0, "example": 1, "type": "integer" }, "locale": { "example": "en-US", "type": "string" }, "name": { "example": "Eric", "type": "string" }, "profiles": { "items": { "properties": { "created_time": { "example": "2015-06-12T21:28:14.680Z", "type": "string" }, "displayName": { "example": "Eric", "type": "string" }, "emails": { "items": { "example": "foo", "type": "string" }, "type": "array" }, "id": { "example": "eric@pactsafe.com", "type": "string" }, "photos": { "items": { "example": "foo", "type": "string" }, "type": "array" }, "provider": { "example": "local", "type": "string" }, "updated_time": { "example": "2015-06-12T21:28:14.680Z", "type": "string" } }, "type": "object" }, "type": "array" }, "time_zone": { "example": "EDT", "type": "string" }, "verified": { "default": true, "example": true, "type": "boolean" }, "verified_time": { "example": "2015-06-12T21:29:46.955Z", "type": "string" } }, "type": "object" } } } } ] } } } }, "403": { "description": "Forbidden." }, "404": { "description": "Not found." } }, "deprecated": false } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/reference/retrieve-user-memberships-for-an-account-1.md # List all User Memberships # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "contact": { "email": "support@ironcladapp.com", "name": "Ironclad Support" }, "title": "REST API", "version": "v1.1" }, "security": [ { "Bearer": [] } ], "servers": [ { "description": "Ironclad Clickwrap REST API", "url": "https://api.pactsafe.com/v1.1" } ], "components": { "securitySchemes": { "Bearer": { "scheme": "bearer", "type": "http" } } }, "paths": { "/accounts/{account_id}/members": { "get": { "summary": "List all User Memberships", "description": "", "operationId": "retrieve-user-memberships-for-an-account", "tags": [ "Accounts" ], "parameters": [ { "name": "account_id", "in": "path", "description": "The ID of the PactSafe Account.", "schema": { "type": "integer", "format": "integer" }, "required": true }, { "in": "query", "name": "page", "description": "Page number to offset results for pagination. Defaults to 1.", "schema": { "type": "integer" } }, { "in": "query", "name": "per_page", "schema": { "type": "integer" } }, { "in": "query", "name": "expand", "description": "Expands objects that only return an ID. Works up to 2 levels deep.", "schema": { "type": "string" } }, { "in": "query", "name": "filter", "description": "Filter activities by the various fields. Note the use of 'and' between the fields. Example: `event_type==agreed and signer_id==claddy@ironcladapp.com`.\n", "schema": { "type": "string" } }, { "in": "query", "name": "sort", "description": "Sort the results of your call by a field in the Request.", "schema": { "type": "string" } }, { "in": "query", "name": "no_count", "schema": { "type": "boolean" } }, { "in": "query", "name": "fields", "schema": { "type": "string" } }, { "in": "query", "name": "lean", "schema": { "type": "boolean" } } ], "responses": { "200": { "description": "200", "content": { "application/json": { "schema": { "type": "object", "allOf": [ { "properties": { "count": { "type": "integer" }, "has_more": { "type": "boolean" }, "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total_count": { "type": "integer" } }, "title": "Collection", "type": "object" }, { "properties": { "data": { "type": "array", "items": { "properties": { "email": { "example": "eric@pactsafe.com", "type": "string" }, "id": { "default": 0, "example": 1, "type": "integer" }, "locale": { "example": "en-US", "type": "string" }, "name": { "example": "Eric", "type": "string" }, "profiles": { "items": { "properties": { "created_time": { "example": "2015-06-12T21:28:14.680Z", "type": "string" }, "displayName": { "example": "Eric", "type": "string" }, "emails": { "items": { "example": "foo", "type": "string" }, "type": "array" }, "id": { "example": "eric@pactsafe.com", "type": "string" }, "photos": { "items": { "example": "foo", "type": "string" }, "type": "array" }, "provider": { "example": "local", "type": "string" }, "updated_time": { "example": "2015-06-12T21:28:14.680Z", "type": "string" } }, "type": "object" }, "type": "array" }, "time_zone": { "example": "EDT", "type": "string" }, "verified": { "default": true, "example": true, "type": "boolean" }, "verified_time": { "example": "2015-06-12T21:29:46.955Z", "type": "string" } }, "type": "object" } } } } ] } } } }, "400": { "description": "Bad request." } }, "deprecated": false } } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/retrieving-data-in-bulk.md # Retrieving Activity Data in Bulk Today, there are a few available options for retrieving bulk Activity of data from the Ironclad Clickwrap platform outside of our web application. While reviewing these options, please keep in mind that we encourage you to limit your use of these routes to what is absolutely necessary. If you have more sophisticated or complex needs, please reach out to our support team for additional information on other methods that may be available. ## REST API - Tasks Route Our REST API provides a `/tasks` route that allows you to programmatically trigger the initiation of generating a CSV export of Activity data. **How**\ When using the `/tasks/export/activity` route, you are able to export activity data to a CSV asynchronously and retrieve the link(s) to the exported CSV by checking the status of the export with an ID generated upon creating the Task. For example, your overall flow would look something like this: {484} Tasks Process Overview When the export has completed successfully, you’ll see a property links that contains links to the CSV(s) available for download. ### Starting the Export Below, we’ll cover some key concepts when using this route—which we highly recommend reading through to ensure the exports are successful. **Filtering**\ When generating the export, you may want to limit the amount of data that is returned. To do this, you can supply a filter parameter that can limit the scope of the query on Activity data. Utilizing this is highly recommended in high-volume environments. Example: `https://api.pactsafe.com/v1.1/tasks/export/activity?filter=created_time>=2020-10-10 and event_type==agreed` The above API call when generating the export will only look for Activities that occurred after the specified date and are only agreed events. **Specifying Fields**\ Additionally, when generating the export, you may want to specify the columns data that gets returned in the CSV. Doing this requires adding a fields parameter with the field names you want to return. The fields `id`, `signer_id`, `created_time` should always be included in your call. If I wanted to specify additional fields like the IP Address, Page Title of the acceptance and a custom data field that I’ve previously used named VIP, my fields parameter and value would look like this: `fields=id,signer_id,created_time,connection_data.remote_address,connection_data.page_title,custom_data.vip` This will result in the CSV having column headers that appear like the following:
id signer\_id created\_time connection\_data.remote\_address connection\_data.page\_title custom\_data.vip
5f88980b5944913d477c6dce 123 2020-10-15T18:42:19.689Z 1.1.1.1 My Page TRUE
Note: not sure which fields are available or used on your site? Make the following call to retrieve the list by doing a GET on `https://api.pactsafe.com/v1.1/sites/:id/exportFields` **Full POST Example** ```http https://api.pactsafe.com/v1.1/tasks/export/activity?filter=created_time>=2020-10-10 and event_type==agreed&fields=id,signer_id,created_time,connection_data.remote_address,connection_data.page_title,custom_data.vip&no_count=true&lean=true ``` [View API Reference documentation](https://developer.pactsafe.com/reference/tasks?showHidden=ccd8f#export-activity-to-csv) for more information. **Example Response** ```json { "data": { "status": "pending", "source": "api", "retry_count": 0, "active": true, "job_name": "GenerateExportCSV", "created_by": 9785, "account": 2785, "site": 5193, "data": { "exportName": "action", "exportType": "Action", "sendTo": "example@example.com" } "id": "5f88abf5f4689d7295cf1134" } } ``` ### Retrieving Job Data and CSV With the POST response, you’ll need to use the id property and use it to retrieve the status by doing a GET on the following: `https://api.pactsafe.com/v1.1/tasks/export/:id` which tells you the current status of the job and if it has successfully finished, it will provide the link(s) to the CSV (can contain multiple links depending on volume). [View API Reference documentation](https://developer.pactsafe.com/reference/tasks?showHidden=ccd8f#retrieve-status-on-activity-to-csv) for more information. > 📘 Automatic Deletion > > Please note that these CSVs are automatically deleted after 30 days. ## REST API - Activity Route Additionally, with our REST API, you can retrieve a “list” of Activity of Signers within Ironclad Clickwrap using the /activity route. This is the easiest way to get data from the Ironclad Clickwrap platform but we also *strongly* recommended working with your Ironclad Clickwrap Customer Success Manager on ensuring the best query is made when using this route. **How**\ When using the /activity route, you can grab the data and utilize a couple of parameters that help reduce and filter data. For example, you can make the following API call to retrieve Agreed Activity events that were created after or equal to the specified date:\ `https://api.pactsafe.com/v1.1/activity?filter=event_type==agreed and created_time>=2020-10-14&no_count=true&lean=true` Additionally, a no\_count parameter that is equal to true and a lean parameter equal to true is used to reduce overhead and overall payload size. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/retrieving-group-html-or-data.md # Retrieving Clickwrap HTML or Data At certain times, you may not be able to utilize one of our SDKs or our JavaScript Snippet but need a way to present your Clickwrap or at least retrieve data about the Clickwrap. Fortunately, this is still a possibility with our Activity API. > 🚧 Heads Up > > Going this route typically requires heavy customization that would normally be provided by one of our SDKs or our JavaScript Library. Technical support may be limited. ## Endpoints We have two available endpoints, which both allow you to retrieve data about a Group set up within your Ironclad Clickwrap account: * `https://pactsafe.io/load/html` — [API Reference Page](https://clickwrap-developer.ironcladapp.com/reference/retrieve-group-html) * `https://pactsafe.io/load/json` — [API Reference Page](https://clickwrap-developer.ironcladapp.com/reference/retrieve-group-json) ## Usage Examples ### Retrieve Group HTML In some scenarios, you may want to load the Group data server-side rather than using the JavaScript Library/SDKs. You may also need the HTML and appropriate CSS styling as well. This is possible with the `/load/html` endpoint, which contains data fairly similar to what our JavaScript library would normally contain. This would require doing a `GET` with `https://pactsafe.io/load/html?sid=YOUR_SITE_ACCESS_ID&gkey=YOUR_GROUP_KEY`, which will return data with the styling and HTML for the clickwrap chosen within your Group settings. As an example, with my test group, I receive the following HTML data: ```html
``` This gives me the data I need to create the Clickwrap within my own environment. > 🚧 Functionality Caveat > > Functionality for the Clickwrap requires custom code when our JavaScript library is not being used. ### Retrieve Group JSON Say for example you have a mobile native app where our JavaScript Library may not be the best fit for implementation. Instead, you may want to grab the raw JSON data for the Group that can be used for your environment. You could then do a `GET https://pactsafe.io/load/json?sid=YOUR_SITE_ACCESS_IDgkey=YOUR_GROUP_KEY` to retrieve JSON data about the group. As an example, with my test group, I receive the following JSON data: ```json { "key": "example-web-group", "type": "group", "style": "combined", "group": 6972, "container_selector": "contracts-container", "signer_id_selector": "", "form_selector": "", "block_form_submission": true, "force_scroll": false, "alert_message": "Before you can submit this form, you must accept all of our legal contracts.", "confirmation_email": false, "triggered": false, "legal_center_url": "https://vault.pactsafe.io/s/790d7014-9806-4acc-8b8a-30c4987f3a95/legal.html", "acceptance_language": "I understand and agree to {{contracts}}.", "contract_data": { "54146": { "published_version": "5e95dcf23e634b0aac650716", "title": "Privacy Policy", "key": "privacy-policy", "change_summary": "" }, "54147": { "published_version": "5e3060462985a640d78aba14", "title": "Terms of Service", "key": "contract-rki1kxfps", "change_summary": "" } }, "contracts": [54147, 54146], "versions": ["5e3060462985a640d78aba14", "5e95dcf23e634b0aac650716"], "major_versions": ["5e3060462985a640d78aba14", "5e95dcf23e634b0aac650716"], "render_id": "5f64c0cddbf1201742e99b0b", "rendered_time": 1600438477, "auto_run": true, "display_all": false, "contract_html": "...", "locale": "en-us" } ``` This gives you most of the information you would need about the Group to create your own Clickwrap and/or retrieve the required information for sending acceptance. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/salesforce-integration-via-salesforce-apex.md # Salesforce Integration (via Salesforce Apex) ## Overview This guide provides a framework for integrating Ironclad Clickwrap and Salesforce with Salesforce Apex. This guide will walk through how to write Ironclad Clickwrap data back to Salesforce once a Contract has been signed or agreed to. This option will use Salesforce Apex with [Ironclad Clickwrap's Webhooks](https://clickwrap-developer.ironcladapp.com/docs/working-with-pactsafe-webhooks) and Salesforce. ## Requirements ### Ironclad Requirements * **Ironclad Clickwrap Account:** Add a template to a group and publish the group. The acceptance of this contract will trigger a new Salesforce record. * **Webhook Access:** Webhooks will be created on the Ironclad Clickwrap Site [integrations page](https://app.pactsafe.com/settings/integrations). * **Reference:** Please see [Ironclad Clickwrap's Webhooks](https://clickwrap-developer.ironcladapp.com/docs/working-with-pactsafe-webhooks) documentation for the most up-to-date details on webhooks. ### Salesforce Requirements * **Apex Classes:** Visit Salesforce’s [Apex Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_dev_guide.htm) for introductory resources. ## Setup ### Create a Custom Object in Salesforce Within Salesforce, a new custom Object will hold new clickwraps records. Existing Salesforce Objects can be used. Navigate to Setup > Object Manager to create a custom object called Clickwrap. Within the new Object, add new fields to tie into the Clickwrap acceptance record. For this guide, add a new *Created Date* field with Date/Time data type and *Company Name* field. ### Create an Apex Class in Salesforce The next few sections will cover how to create a webhook listener within Salesforce. A webhook listener in Salesforce will expose an endpoint URL that will receive event messages from Ironclad Clickwrap. Start by creating a simple Apex Class. 1. Navigate to Salesforce > Setup 2. Search for Apex Classes 3. Create new a new Apex Class 4. Copy and paste the code below for a simple Apex Class called *webhookClickwrap* 5. Save and activate Apex Class ```java Apex @RestResource(urlMapping='/api/webhooks/clickwrap/*') global class webhookClickwrap { @HttpPost global static void clickwrap() { try{ RestRequest req = RestContext.request; RestResponse res = RestContext.response; }catch(Exception e){ System.debug('Exception Happened:' +e.getMessage()); } } } ``` ### Create a Public Site in Salesforce Next, you will need an active Salesforce Site. Salesforce Sites enables you to create public websites and applications that are directly integrated with your Salesforce organization. 1. In Setup, search for “site” and select User Interface > Sites and Domains > Sites 2. Create a new Site and mark it as Active {1614} 3. Within the new Site, click on the button for Public Access Settings {711} 4. Add the new *webhookClickwrap* Apex Class that was created in the prior sections into the Enabled Apex Classes. {645} 5. Save and click the Activate button to activate the site you have created. You will need the site URL for the next section. ### Webhook Listener URL After activating the Salesforce site, you can create the webhook URL. The webhook URL consists of three parts. Combine all three to create the webhook URL: 1. **Salesforce site URL:** Obtained from the previous section 2. *services/apexrest/* 3. *ing]* The *u* The *urlMapping* was set the Apex code which was *api/webhooks/clickwrap/.* Here is the example webhook URL for this guide, "*[https://xx.sandbox.my.salesforce-sites.com/services/apexrest/api/webhooks/clickwrap/](https://xx.sandbox.my.salesforce-sites.com/services/apexrest/api/webhooks/clickwrap/)*". ### Create Webhook in Ironclad Now, you'll want to set up your Webhook in Ironclad Clickwrap to talk to Salesforce. You can get to Webhooks in Ironclad Clickwrap by going to [Settings > Integrations](https://app.pactsafe.com/settings/integrations). **For this example, we're going to set up a Webhook for when any contract is agreed upon.** 1. Click "Add Webhook" in Integrations 2. Paste in the URL from Salesforce in the previous section 3. Use HTTP "POST" when setting up your webhook 4. Select the toggle for "Activity - Agreed" ### Process Data in Apex After creating the Ironclad Clickwrap Webhook, Salesforce will now be able to receive the information on the agreed activity. The agreed activity Webhook contains user information and any custom data. This can be used to populate the Salesforce record. The sample code below will parse through the request body for custom data and a date field. Then, a new record in the new custom object, *clickwrap*. The parsed data will then be used to populate into the fields of the new record. ```java Apex @RestResource(urlMapping='/api/webhooks/clickwrap/*') global with sharing class webhookClickwrap { @HttpPost global static void clickwrap() { try{ RestRequest request = RestContext.request; RestResponse response = RestContext.response; Blob bB = request.requestBody; //iterate through JSON JSONParser parser = JSON.createParser(request.requestBody.toString()); custom_data cus; String datetimeString; Datetime dt; while (parser.nextToken() != null) { if (parser.getText() == 'custom_data'){ parser.nextToken(); cus = (custom_data)parser.readValueAs(custom_data.class); System.debug(cus); } if(parser.getText() == 'created_time'){ System.debug('Inside created_time'); parser.nextToken(); datetimeString = parser.getText(); dt = (Datetime)JSON.deserialize('"' + datetimeString + '"', Datetime.class); System.debug('datetime'+dt); } } //Create new record in object and add details clickwrap__c detail = new clickwrap__c(); detail.Create_Date__c = dt; detail.Company_Name__c = cus!=null?cus.company_name:''; detail.Name = cus!=null?cus.full_name:''; insert detail; response.statusCode = 200; response.responseBody = Blob.valueOf(JSON.serialize(new SFDCResponse('Success', 'Processed Successfully'))); }catch(Exception e){ System.debug('Exception Happened:' +e.getMessage()); } } public class SFDCResponse{ String response; String message; public SFDCResponse(String resp, String msg){ response = resp; message = msg; } } public class custom_data{ public String company_name; public String full_name; public custom_data(String company_name, String full_name){ company_name = company_name; full_name = full_name; } } } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/salesforce-integration-via-zapier.md # Salesforce Integration (via Zapier) ## Overview This guide provides a framework for integrating Ironclad Clickwrap and Salesforce, utilizing Zapier as a middleware tool. This guide will walk through how to write Ironclad Clickwrap data back to Salesforce once a Contract has been signed or agreed to. This option will use Zapier's connectors with [Ironclad Clickwrap's Webhooks](https://clickwrap-developer.ironcladapp.com/docs/working-with-pactsafe-webhooks) and Salesforce. ## Requirements ### Ironclad Requirement * **Ironclad Clickwrap Account:** Add a template to a group and publish the group. The acceptance of this contract will trigger a new Salesforce record. * **Webhook Access:** Webhooks will be created on the Ironclad Clickwrap Site [integrations page](https://app.pactsafe.com/settings/integrations). * **Reference:** Please see [Ironclad Clickwrap's Webhooks](https://clickwrap-developer.ironcladapp.com/docs/working-with-pactsafe-webhooks) documentation for the most up-to-date details on webhooks. ### Zapier Requirement * Premium Apps are required. Visit Zapier's [documentation for Salesforce integration](https://help.zapier.com/hc/en-us/articles/8496020790925-How-to-Get-Started-with-Salesforce-on-Zapier). ### Salesforce Requirement * A Salesforce account is required along with a user with the correct read/write permissions on the desired Object. ## Setup ## Zapier Setup ### Create a new Zap To get started on building integration with Ironclad Clickwrap and Salesforce, start within Zapier and follow the steps below: 1. Create a new Zap and select "Webhooks by Zapier" as your Trigger. {2566} 2. Select "Catch Hook" and press "Continue" {1820} 3. Click "Continue" again (there's no child key) 4. Copy the webhook URL to your clipboard! ## Ironclad Setup Now that you have a webhook URL, you'll be able to start creating a Webhook within Ironclad. You can get to Webhooks in Ironclad Clickwrap by going to [Settings > Integrations](https://app.pactsafe.com/settings/integrations). **For this example, we're going to set up a Webhook for when any contract is agreed upon.** 1. Click "Add Webhook" in Integrations {1430} 2. Paste in the URL you copied to your clipboard from Zapier 3. Use HTTP "POST" when setting up your webhook 4. Select the toggle for "Activity - Agreed" {2646} To test the Webhook with the data, press "Save" and "Test Webhook". You will now see a test notification under "Test Notifications" on the left panel. This will send a test event to Zapier and the Zap that was created. ## Test Webhook in Zapier After you've sent a test from Ironclad, you can go back to Zapier and click "Test trigger" and you should see the green checkbox confirming the Webhook successfully triggered in Zapier. ## Create a Filter in Zapier (Optional) You can create additional actions like filters prior to connecting to Salesforce. Creating a filter step will allow you to set up criteria to use a specific set of Clickwrap agreements. For example, you can filter a specific Clickwrap Group so that only Order Forms will create a record with Salesforce and regular Sign Up Clickwraps will not create a record. 1. Add a new Action and select "Filter" {1820} 2. To create a criteria, select a data field like "Groups". 3. Choose "(Text) exactly matches" for condition. 4. Then input the Group number. 5. Press "Continue". {1804} Only clickwraps agreed with the criteria will move forward to the next step in Salesforce. ## Create a Salesforce Action in Zapier The final step is to create a Salesforce Action in Zapier which will create a new lead for each Agreed Clickwrap. Here's a quick example of how you can create a new Lead when for an "agreed" Clickwrap event: 1. Create a new Action 2. Search and select "Salesforce" 3. Select "Create Record" for the event 4. Press "Continue" {1804} For the next step, log into your Salesforce account and ensure your profile has the right read/write permissions. After connecting Salesforce, you will be able to select a specific Object. Under Salesforce Object, pick "Lead" to create new records under the Lead Object. You can also use another Object if necessary. Zapier will automatically pull all the fields under the "Lead" Object. All required fields will need a value or a field mapped over. You can map over a field from the Ironclad webhook with the following steps: 1. Click into the empty box for each field 2. Select "1. Catch Hook in Webhooks by Zapier" 3. Select the available data options from the webhook. {1808} Repeat the mapping exercise for all the required fields. Finally, press "Continue" and Test the Action. The test will automatically create a fake Lead in Salesforce and you can now Publish your Zap. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/sdk-overview.md # Overview Be sure to visit our [GitHub page](https://github.com/pactsafe) for our latest public examples! --- # Source: https://clickwrap-developer.ironcladapp.com/docs/setting-up-the-javascript-snippet.md # Setting up the JavaScript Snippet This reference documents the JavaScript Snippet used to include the Ironclad Clickwrap Library on a website. **Note**: This snippet includes the option to include a backup copy of `ps.min.js` on your own server or one you specify should our snippet fail to load on the page. If our snippet does not load successfully after 4 seconds (notice the configurable timeout in the last parameter), then it will load the backup. Notice the `cloudfront.net` URL which you can replace with `ps.min.js` hosted on your own servers. # Minified ```javascript (function(w,d,s,c,f,n,t,g,a,b,l){w['PactSafeObject']=n;w[n]=w[n]||function(){(w[n].q=w[n].q||[]).push(arguments)},w[n].on=function(){(w[n].e=w[n].e||[]).push(arguments)},w[n].once=function(){(w[n].eo=w[n].eo||[]).push(arguments)},w[n].off=function(){(w[n].o=w[n].o||[]).push(arguments)},w[n].t=1*new Date(),w[n].l=0;a=d.createElement(s);b=d.getElementsByTagName(s)[0];a.async=1;a.src=c;a.onload=a.onreadystatechange=function(){w[n].l=1};a.onerror=a.onabort=function(){w[n].l=0};b.parentNode.insertBefore(a,b);setTimeout(function(){if(!w[n].l&&!w[n].loaded){w[n].error=1;a=d.createElement(s);a.async=1;a.src=f;a.onload=a.onreadystatechange=function(){w[n].l=1};a.onerror=a.onabort=function(){w[n].l=0};b.parentNode.insertBefore(a,b);l=function(u,e){try{e=d.createElement('img');e.src='https://d3r8bdci515tjv.cloudfront.net/error.gif?t='+w[n].t+'&u='+encodeURIComponent(u);d.getElementsByTagName('body')[0].appendChild(e)}catch(x){}};l(c);setTimeout(function(){if(!w[n].l&&!w[n].loaded){w[n].error=1;if(g&&'function'==typeof g){g.call(this);}l(f)}},t)}},t)})(window,document,'script','//vault.pactsafe.io/ps.min.js','//d3l1mqnl5xpsuc.cloudfront.net/ps.min.js','_ps',4000); // Creates a Site object with the default configuration. _ps('create', '25b2b173-632a-4227-9877-31d2109d8c98'); ``` # Unminified ```javascript (function(w, d, s, c, f, n, t, g, a, b, l) { // Defines the global _ps object and initializes the _ps() function // that will queue commands until the Ironclad Clickwrap Library is ready. w['PactSafeObject'] = n; w[n] = w[n] || function() { (w[n].q = w[n].q || []).push(arguments) }, // Defines the event functions for the global _ps object. w[n].on = function() { (w[n].e = w[n].e || []).push(arguments) }, w[n].once = function() { (w[n].eo = w[n].eo || []).push(arguments) }, w[n].off = function() { (w[n].o = w[n].o || []).push(arguments) }, // Marks the time that the script is inserted. w[n].t = 1 * new Date(), w[n].l = 0; // Inserts a new script element to load the Ironclad Clickwrap Library JS file (ps.js). a = d.createElement(s); b = d.getElementsByTagName(s)[0]; a.async = 1; a.src = c; // Marks that the script has started loading or failed to load. a.onload = a.onreadystatechange = function() { w[n].l = 1 }; a.onerror = a.onabort = function() { w[n].l = 0 }; b.parentNode.insertBefore(a, b); // Retry loading the script from a fallback location after 4 seconds. setTimeout(function() { if (!w[n].l && !w[n].loaded) { w[n].error = 1; a = d.createElement(s); a.async = 1; a.src = f; a.onload = a.onreadystatechange = function() { w[n].l = 1 }; a.onerror = a.onabort = function() { w[n].l = 0 }; b.parentNode.insertBefore(a, b); // Log the loading error via beacon. l = function(u, e) { try { e = d.createElement('img'); e.src = 'https://d3r8bdci515tjv.cloudfront.net/error.gif?t=' + w[n].t + '&u=' + encodeURIComponent(u); d.getElementsByTagName('body')[0].appendChild(e); } catch(x) {} }; l(c); // Call the optional error callback function after a second failed attempt. setTimeout(function() { if (!w[n].l && !w[n].loaded) { w[n].error = 1; if (g && 'function' == typeof g) { g.call(this); } l(f); } }, t); } }, t); })(window, document, 'script', '//vault.pactsafe.io/ps.min.js', '//d3l1mqnl5xpsuc.cloudfront.net/ps.min.js', '_ps', 4000, function optionalErrorCallback() { alert('Unable to load the JS Library.') }); // Creates a Site object with the default configuration. _ps('create', '25b2b173-632a-4227-9877-31d2109d8c98'); ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/signer-object.md # Signer Object A Signer in Ironclad Clickwrap refers to the counterparty accepting the contract. Signer objects in Ironclad are uniquely identified by the `signer_id`, which can be any string but are most commonly one of the following: * Email address * User ID * Account UUID # Creating a New Signer Signer objects are automatically created in Ironclad Clickwrap whenever a new `signer_id` is passed with an acceptance. The new Signer object will contain any `custom_data` attributes sent with the acceptance. ## Default Properties Ironclad has a few reserved `custom_data` properties for signer attributes that are recommended and will appear conveniently in certain in-app locations throughout the Ironclad UI. These are indicated below: * first\_name, last\_name OR name (equivalent) * company\_name * title * email (important for clickwrap notification acceptance email) * mobile\_number ## Custom Properties Signer objects can also include **any** custom property keys you’d like, and you will be able to use them as filters to locate the relevant Signer records. # Updating Existing Signers Importantly, if you pass an existing `signer_id` with an acceptance, the existing Signer object will be associated to the record, but by default its attributes **will not** be overwritten by the new `custom_data`. To update existing Signer objects, you can do so at any time by sending an ‘updated’ event to Ironclad. See [here](https://clickwrap-developer.ironcladapp.com/docs/loading-a-clickwrap-101#sending-acceptance-with-custom-data) for more information. ## Counterparty as an Entity When your counterparty is an entity rather than an individual, it is often best practice to supply a unique account id as the `signer_id`. This way the Signer is generally applicable to the entire counterparty corporation rather than tied to an individual who might not be with the company forever. In addition, if the counterparty entity ever changes its legal name, you can send an ‘updated’ event to Ironclad and update how the counterparty’s name will appear in the records. ## Clickwrap Acceptance Confirmation Email If an email address is specified on the Signer object (as either the `signer_id` or in the email field), then this can be used to send an acceptance confirmation email from Ironclad to the counterparty at the time of acceptance. Click [here]() for more information on sending a confirmation email to your counterparty signers. --- # Source: https://clickwrap-developer.ironcladapp.com/docs/site-object.md # Site Object This reference documents the properties and methods available on the Site object. # Properties ## Site.parameters `ParameterStore` A DataObject used by a Site to store its properties, parameters, and various data gathered about the browsing session. The values stored in `parameters` are appended to the payload of every request sent to the Action API, where they're saved as metadata on the action. ## Site.groups `GroupStore` An object used internally by a Site to store and reference all of the Group objects loaded within that Site. The GroupStore maintains which Groups have been `loaded`, which have been `initialized`, and any configuration options passed to the `load` command. ## Site.tasks `TaskStore` A chain of functions that every `send` and `retrieve` command is passed through in order to **validate**, **build** and **send** a request to the Action API. Each of the tasks is described in the table below. **Note**: If a validation task fails, the command will be aborted and a `'ps:error'` DOM event will be triggered, identifying which function failed. ### Tasks |\_|NAME|ABORTS|DESCRIPTION| |------|------|------|------------| |1|`optOutTask`|True|Validates that the visitor has not opted-out of tracking.| |2|`previewTask`|True|Validates that the browser is not in a preview or preload state.| |3|`checkProtocolTask`|True|Validates that the protocol is either HTTP or HTTPS.| |4|`requiredParametersTask`|True|Validates that all required parameters are present. The `access_id` parameter is always required, and `signer_id` is required for all actions except `'visited'` and `'displayed'`.| |5|`checkStorageTask`|True|Validates that a `uuid` for the signer has been stored in a first-party cookie.| |6|`rateLimitTask`|True|Enforces a limit of 1,000 requests per session, and throttles excessive request rate.| |7|`buildActionTask`|False|Forms a singe URL-encoded string for the request payload by combining all of the Site's parameters with any override values that were passed into the `send` command. Parameter names are substituted with their shortened code to save bytes.| |8|`sendActionTask`|False|Sends the payload generated by the `buildActionTask` to the Action API. Browser compatibility and the length of the payload will determine the transport type of the request: `'beacon'`, `'image'` or `'xhr'`.| # Methods ## get Returns the value of a parameter or property stored on the Site. ```javascript site.get(parameter); ``` ### Arguments |\_|NAME|TYPE|DESCRIPTION| |------|------|------|------------| |`parameter`|True|String|The name of the parameter to return.| ### Returns ||| |------|------------| |`String, Number, Boolean, Object, etc.`|The value of the parameter or property, or undefined if the parameter isn't set.| ### Examples ```javascript // Returns the "name" property. var val = site.get('name'); // 's0' ``` ```javascript // Returns the "signer_id" parameter. var val = site.get('signer_id'); // 'john@pactsafe.com' ``` ```javascript // Returns undefined if the parameter hasn't been set. var val = site.get('event_callback'); // undefined ``` ## set Sets the value of one or more parameters on the Site. Accepts either a single parameter name and value, or an object of multiple parameter name and value pairs to set. **Note**: This method only applies to *parameters*. All properties must be set when the Site object is created. ```javascript site.set(parameter, value); ``` ```javascript site.set(parameters); ``` ### Arguments |\_|NAME|REQUIRED|TYPE|DESCRIPTION| |------|------|------|------|------------| |Option 1|`parameter`|True|String|The name of the parameter to set.| ||`value`|True|String, Number, Object, Function, etc.|The value of the parameter to set.| |Option 2|`parameters`|True|Object|An object containing one or more parameter name and value pairs to set.| ### Returns No Return Value ### Examples ```javascript // Sets the "signer_id" parameter. site.set('signer_id', 'john@pactsafe.com'); ``` ```javascript // Unsets the "signer_id" parameter. site.set('signer_id', null); ``` ```javascript // Sets the "event_callback" parameter. site.set('event_callback', function(err) { if (err) console.error(err); }); ``` ```javascript // Sets multiple parameters at once. site.set({ localized: true, signer_id: 'john@pactsafe.com', event_callback: submitForm }); ``` ```javascript // Cannot update Site properties such as "name". site.get('name'); // 'p0' site.set('name', 'pactsafe'); site.get('name'); // 'p0' ``` ## getByKey Returns a Group object by key. **Note**: Because Groups are loaded asynchronously, this method should only be used when you are certain the Group has already been loaded and initialized. For example, within the handler of an `'initialized'` event, or the callback of a load command. ```javascript site.getByKey(key); ``` ### Arguments |NAME|REQUIRED|TYPE|DESCRIPTION| |------|------|------|------------| |`key`|True|String|The key of the Group to return.| ### Returns ||| |------|------------| |`BrowsewrapGroup` or `ClickwrapGroup`|The initialized Group object.| ### Examples ```javascript // Returns a Group with the key "login-contracts". var group = site.getByKey('login-contracts'); ``` ```javascript // Loads a Group with the key "login-contracts". site.load('login-contracts'); ``` ```javascript // Waits to assign the Group to a local variable until it's actually // needed for form validation within the "click" event handler. $('#submit-login').on('click', function(evt) { var group = site.getByKey('login-contracts'); if (group && group.block()) { alert(group.get('alert_message')); return false; } }); ``` ```javascript // Waits for an "initialized" event on the Document object // before assigning the Group to a variable. var group; $(document).on('initialized', function(evt) { group = site.getByKey('login-contracts'); }); ``` ```javascript // Uses the command queue to load a Group. _ps('load', 'login-contracts'); ``` ### Mistakes to Avoid ```javascript // Loads the Group and immediately assigns it to a local variable. // The async "load" command hasn't finished, so "group" is undefined. _ps('load', 'login-contracts'); var group = site.getByKey('login-contracts'); // undefined ``` ## getAllGroups Returns all of the Group objects that have been loaded by the Site. ```javascript site.getAllGroups(); ``` ### Arguments No Arguments ### Returns ||| |------|------------| |Array``|An array containing all of the initialized Group objects.| ### Examples ```javascript // Returns all Groups that have been loaded and initialized. var groups = site.getAllGroups(); ``` ## send Tracks an action by sending a request to the Action API. **Note**: Any parameter values passed into the send method are treated as temporary overrides. They apply only to the current action and leave the Site's existing parameters unchanged. ```javascript site.send(event_type, [param1, param2, ..., paramN]); ``` ```javascript site.send(event_type, [parameters]); ``` ### Arguments |\_|NAME|REQUIRED|TYPE|DESCRIPTION| |-----|------|------|------|------------| ||`event_type`|True|String|The type of the action being sent. Supported values include: `'agreed'`, `'disagreed'`, `'displayed'`, `'visited'` and `'updated'`.| |Option 1|`param1`, `param2`, ..., `paramN`|Conditional|Any|Parameter values that can be supplied as in-line arguments for convenience. The parameter that corresponds to each argument position varies based on the `event_type` of the send.| |Option 2|`parameters`|Conditional|Object|A single object containing parameter name and value pairs to use for this send only.| ### Returns No Return Value ### Examples ```javascript // Sends an "agreed" action with in-line parameters // for "contracts", "versions" and "group". site.send('agreed', [ 10, 14 ], [ '5589bf606e7b9c1b1deef447', '5589bf606e7b9c1b1deef450' ], 33); ``` ```javascript // Sends an "agreed" action with a parameters object. site.send('agreed', { contracts: [ 10, 14 ], versions: [ '5589bf606e7b9c1b1deef447', '5589bf606e7b9c1b1deef450' ], group: 33 }); ``` ```javascript // Sends an "updated" action. site.send('updated', { signer_id: 'john@pactsafe.com', custom_data: { first_name: 'John', gender: 'male' } }); ``` ## retrieve Retrieves the signer's latest acceptance data from the Action API. **Note**: This method requires that the Site's `signer_id` parameter is set. ```javascript site.retrieve(contracts, [event_callback]); ``` ### Arguments |NAME|REQUIRED|TYPE|DESCRIPTION| |------|------|------|------------| |`contracts`|True|Array``|An array of contract ids to query for the signer.| |`event_callback`|False|Function|A callback function to execute once the request is complete. The function receives four arguments: err, responseJSON, xhr and context.| ### Returns No Return Value ### Examples ```javascript // Sets the "signer_id" to "john@pactsafe.com". site.set('signer_id', 'john@pactsafe.com'); ``` ```javascript // Retrieves the latest version of contracts // 10 and 14 that the signer has accepted. site.retrieve([ 10, 14 ], function(err, data, xhr, site) { if (err) console.error(err); else console.log(data); // { '10': '5589bf606e7b9c1b1deef447', '14': '5589bf606e7b9c1b1deef448' } }); ``` ## load Registers a Group object on the Site, and inserts a new `
``` The Signer ID Selector is the ID of the page element where Ironclad Clickwrap will listen to in order to identify the person accepting the contracts. By default, the "Signer ID Selector" of an embedded form is `input-signer_id` (as defined by the form loaded on the page). ### What to do after an embedded form is accepted Once the embedded form is accepted, Ironclad Clickwrap fires a `valid` event that you can attach a callback to like so: ```javascript _ps.on('valid', function(){ console.log(arguments); // DO SOMETHING }); ``` Here are some typical use cases that you'd use when embedding a Ironclad Clickwrap form: * Redirecting to another page to complete a purchase or pay * Hide the embedded form and show Stripe Checkout * Send the user to a confirmation page ### How to hide fields in an embedded form Sometimes, fields like email address may be populated by your own system so you'll want to hide it in the embedded form. Super easy to do—you'll need to do two things: 1. Hide the email field & label on the embedded form. 2. Set the `signer_id_selector` property on your group when you load it. **Hiding the email field & label on the embedded form.** Through some simple JavaScript, you can hide any field in the Ironclad Clickwrap embedded form. Here's an example of hiding the email field & label: ```javascript _ps.on('rendered', function(){ document.getElementById( 'ps-inputs' ).getElementsByTagName( 'label' )[0].style.display = "none"; document.getElementById( 'input-signer_id' ).style.display = "none"; }); ``` **Setting the`signer_id_selector` property when you load.** When you load a group, you can easily overwrite the `signer_id_selector` to tell Ironclad Clickwrap what to listen to: ```html
``` ### Where does the data go after the user clicks "I Agree"? In real-time, when your user clicks "I Agree", a call is made to Ironclad Clickwrap asynchronously to capture that acceptance and store it. Inside of Ironclad Clickwrap, you'll automatically see all the versions accepted by your user in the Legal Profile: ![](https://cl.ly/253N1j2Z3b35/Image%202018-01-03%20at%2011.59.10%20PM.png) --- # Source: https://clickwrap-developer.ironcladapp.com/docs/using-psjs-with-back-end-api-calls.md # Sending Clickwrap Data Server-side You may want to use PS.js to render the contracts on the page, populate a contract with app data, and more—but send the API call on the back-end. Here's how to do it! ## Overview In this article, we'll cover how you can use the JavaScript library in tandem with our API to send acceptance of a contract or contracts on the back-end. You'll learn how to: * Load PS.js and render the contract on the page * Set the Signer ID of the signer programmatically * Disable sending when the checkbox on a click-through agreement is clicked * Send the payload that *would* be sent automatically to your back-end. ## Requirements In order to complete this article, you'll need the following already working: * A published Contract that's been marked "Public" and added to a Group * A published Group with a Group Key * Working knowledge of JavaScript ## When to Use By default, when you load an embedded contract onto a page, we'll automatically send acceptance of a contract as soon as your signer checks the box. Some people don't want to do this, so we've got a couple of different ways to handle sending acceptance. Below you can see our proposed flow for: 1. Loading PS.js and embedding the contracts into your page, which will dynamically grab the right contracts and versions and inject them into the page. 2. Send acceptance *after a user completes the form* using the [Activity API](https://clickwrap-developer.ironcladapp.com/docs/activity-api-docs). {769} ## Load the Embedded Clickwrap Load the Clickwrap with `disable_sending` set to `false`. See [here](https://clickwrap-developer.ironcladapp.com/docs/manually-sending-acceptance#disable-automatic-sending). ## Send Acceptance Server-side Collect the payload using the Group's `getPayload()` method ([reference](https://clickwrap-developer.ironcladapp.com/docs/clickwrapgroup-object#getpayload)) and pass it to your backend. This ensures that the record in Ironclad matches exactly what the counterparty saw and accepted. You can then call [Ironclad's API](https://clickwrap-developer.ironcladapp.com/reference/send-contracts-signedaccepted-by-signer) directly from your sever to generate the record. See the example below. > 🚧 Example Only Code > > Please note that the example code is for demonstration purposes only. Your implementation will most likely be different than what is shown here. ```javascript // Grab the payload (encoded URL params) to be sent once accepted and ready. const myPayload = _ps.site.getByKey('clickwrap-example').getPayload(); /// ... // The Backend receives the data from a hidden input field or some other mechanism // Let's pretend we are using a node server that received the payload. const fetch = require('node-fetch'); (async (myPayload) => { const response = await fetch('https://pactsafe.io/send?et=agreed&server_side=true&addr=123.123.123.123&' + myPayload, { method: null, headers: {'Content-Type': 'application/json'} }); const json = await response.json(); console.log(json); })(); ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/webhook-events.md # Webhook Events + Payload Examples ## Available Webhook Types * [Activity - Agreed](#activity---agreed) * [Version Published](#version-published) * [Group Published](#group-published) * [Activity - All](#activity---all) * [Request Sent](#request-sent) * [Request Signed](#request-signed) * [Request Complete](#request-complete) * [Request Expired](#request-expired) {3630} A view within the Ironclad Clickwrap Web App of the webhook configuration interface. ## Example Payloads There are 7 types of events you can configure for when setting up webhooks. Each event has some common properties and some properties unique to the Webhook. We'll outline an example payload for each Webhook below, including the `Test Webhook` Payload. ### Test Webhook The `Test Webhook` is a webhook button inside the Ironclad Clickwrap Web App that allows you to test your webhook integration. ```json Request Body { "deliverable": true, "type": "webhook", "integration": "123", "sent_to": "https://123.m.pipedream.net", "event_type": "test_event", "description": "Test sent a test event!", "site": 1, "user": 1, "created_time": "2020-10-21T13:45:51.087Z", "updated_time": "2020-10-21T13:45:51.096Z", "id": "1234abcd" } ``` ```json Request Headers { "x-forwarded-for": "1.2.3.4", "x-forwarded-proto": "https", "x-forwarded-port": "443", "host": "example.com", "content-length": "358", "pactsafe-webhook-token": "my-secret-code", "accept": "application/json", "content-type": "application/json" } ``` ### Activity - Agreed This webhook is triggered for each contract in a Signature Request or a Clickwrap. Setting the HTTP Method to `POST` will allow you to receive custom data and render data. ```json Request Body { "type": "webhook", "sent_to": "https://example.com", "site": 12345 "integration": "123", "event_type": "activity_agreed", "description": "test@example.com agreed to Privacy Policy in Group Example Web Group", "custom_data": { "first_name": "John", "last_name": "Walker", "company_name": "Sedona Networks", "title": "Customer Support" }, "deliverable": true, "created_time": "2020-10-21T13:55:59.070Z", "group": 123, "contract": 123, "version": "1234abcd", "activity": "abcd1234abcd1234", "signer_id": "john.walker@ironcladhq.com", "updated_time": "2020-10-21T13:55:59.150Z", "id": "123abc123abc" } ``` ```json Request Headers { "x-forwarded-for": "1.2.3.4", "x-forwarded-proto": "https", "x-forwarded-port": "443", "host": "example.com", "content-length": "358", "pactsafe-webhook-token": "my-secret-code", "accept": "application/json", "content-type": "application/json" } ``` ### Version Published This webhook is triggered any time a new Contract Version is published. ```json Request Body { "deliverable": true, "type": "webhook", "integration": "123", "sent_to": "https://example.com", "event_type": "version_published", "description": "John Doe published version 17.1 of Terms of Service", "site": 1, "version": "5f904073c545986f47ecc1ec", "contract": 123, "user": 1, "created_time": "2020-10-21T14:07:01.230Z", "updated_time": "2020-10-21T14:07:01.231Z", "id": "abcd1234" } ``` ```json Request Headers { "x-forwarded-for": "1.2.3.4", "x-forwarded-proto": "https", "x-forwarded-port": "443", "host": "example.com", "content-length": "358", "pactsafe-webhook-token": "my-secret-code", "accept": "application/json", "content-type": "application/json" } ``` ### Group Published This webhook is triggered any time a Group is published (or republished). ```json Request Body { "deliverable": true, "type": "webhook", "integration": "123", "sent_to": "https://example.com", "event_type": "group_published", "description": "Group Example has been published by John Doe", "site": 1, "group": 123, "custom_data": { "group_key": "group-abc123", "contracts": [ 1234 ], "versions": [ "abcd1234" ] }, "created_time": "2020-10-21T13:51:09.370Z", "updated_time": "2020-10-21T13:51:09.370Z", "id": "abc123abc" } ``` ```json Request Headers { "x-forwarded-for": "1.2.3.4", "x-forwarded-proto": "https", "x-forwarded-port": "443", "host": "example.com", "content-length": "358", "pactsafe-webhook-token": "my-secret-code", "accept": "application/json", "content-type": "application/json" } ``` ### Activity - All This is triggered for any type of Activity on Signature Requests, Smartpacts, and Clickwraps. > 🚧 Limit Usage > > Due to the potential volume of events you may send to Ironclad Clickwrap, we generally don't recommend using this webhook type unless absolutely necessary for your workflow as it could lead to many webhooks events. ```json Request Body { "deliverable": true, "type": "webhook", "integration": "123", "sent_to": "https://example.com", "event_type": "activity_displayed", "description": "test@example.com viewed Privacy Policy in Group Example Web Group", "contract": 1234, "group": 123, "version": "1234abcd", "site": 1, "created_time": "2020-10-21T13:51:09.370Z", "activity": "abcd1234abcd1234", "updated_time": "2020-10-21T13:51:09.440Z", "id": "123abc123abc" } ``` ```json Request Headers { "x-forwarded-for": "1.2.3.4", "x-forwarded-proto": "https", "x-forwarded-port": "443", "host": "example.com", "content-length": "358", "pactsafe-webhook-token": "my-secret-code", "accept": "application/json", "content-type": "application/json" } ``` ### Request Sent This webhook is triggered once a Signature Request has been sent to a Signer. ```json Request Body { "deliverable": true, "type": "webhook", "integration": "123", "sent_to": "https://example.com", "event_type": "request_sent", "description": "John Doe sent This is my request name", "site": 1, "request": "123456abcdef", "user": 1, "created_time": "2020-10-21T13:58:54.578Z", "updated_time": "2020-10-21T13:58:54.578Z", "id": "abcdef12345" } ``` ```json Request Headers { "x-forwarded-for": "1.2.3.4", "x-forwarded-proto": "https", "x-forwarded-port": "443", "host": "example.com", "content-length": "358", "pactsafe-webhook-token": "my-secret-code", "accept": "application/json", "content-type": "application/json" } ``` ### Request Signed This webhook is triggered once a Signer has Agreed to and completed all necessary fields in a Signature Request. ```json Request Body { "deliverable": true, "type": "webhook", "integration": "123", "sent_to": "https://example.com", "event_type": "request_signed", "description": "John Doe signed This is my request name", "site": 1, "request": "123456abcdef", "signer": "a-signer-id", "created_time": "2020-10-21T14:01:17.360Z", "updated_time": "2020-10-21T14:01:17.361Z", "id": "abcdef12345" } ``` ```json Request Headers { "x-forwarded-for": "1.2.3.4", "x-forwarded-proto": "https", "x-forwarded-port": "443", "host": "example.com", "content-length": "358", "pactsafe-webhook-token": "my-secret-code", "accept": "application/json", "content-type": "application/json" } ``` ### Request Complete This webhook is triggered when all Signer(s) have agreed to the Request. ```json Request Body { "deliverable": true, "type": "webhook", "integration": "123", "sent_to": "https://example.com", "event_type": "request_complete", "description": "This is my request name has been completed", "site": 1, "request": "123456abcdef", "created_time": "2020-10-21T14:01:17.395Z", "updated_time": "2020-10-21T14:01:17.395Z", "id": "abcdef12345" } ``` ```json Request Headers { "x-forwarded-for": "1.2.3.4", "x-forwarded-proto": "https", "x-forwarded-port": "443", "host": "example.com", "content-length": "358", "pactsafe-webhook-token": "my-secret-code", "accept": "application/json", "content-type": "application/json" } ``` ### Request Expired This is triggered when a Request has been expired. ```json Request Body { "deliverable": true, "type": "webhook", "integration": "123", "sent_to": "https://example.com", "event_type": "request_expired", "description": "This is my request name has expired", "site": 1, "request": "abcd1234", "created_time": "2020-10-21T14:05:23.821Z", "updated_time": "2020-10-21T14:05:23.821Z", "id": "1234abcd" } ``` ```json Request Headers { "x-forwarded-for": "1.2.3.4", "x-forwarded-proto": "https", "x-forwarded-port": "443", "host": "example.com", "content-length": "358", "pactsafe-webhook-token": "my-secret-code", "accept": "application/json", "content-type": "application/json" } ``` --- # Source: https://clickwrap-developer.ironcladapp.com/docs/working-with-ironclad-webhooks.md # Getting Started with Webhooks ## Learn about webhooks and how events are triggered for your Site Webhooks allow you to automate custom backend actions and downstream processes in response to acceptances that are logged in Ironclad Clickwrap. As Ironclad Clickwrap is usually integrated into existing customer flows - ie. checkout flows, user signup - we can take advantage of webhooks to ensure this information is passed on to relevant systems. ### Setting up your Ironclad Clickwrap Webhook Login to your account and navigate to [Settings > Integrations](https://app.pactsafe.com/settings/integrations). If you don't have Integrations enabled in your account, please contact your Implementation Consultant or our Support team at [support@ironcladhq.com](mailto:support@ironcladhq.com) and we'll help you out! Use the following steps to configure your Ironclad Clickwrap webhook: 1. Click **Add Hook** on the Integrations page. 2. Name your Webhook. 3. Add your webhook endpoint’s URL in **URL**. 4. Set to the **HTTP Method** to GET or POST. 5. Select the [event types](https://clickwrap-developer.ironcladapp.com/docs/webhook-events) you want to receive notifications for. 6. Click **Save**. {2432} A view within the Ironclad Clickwrap Web App of the webhook configuration interface. ### URL In the URL field, define where you want Ironclad Clickwrap to forward events. For testing purposes, you can set up a local webhook host (eg. [ngrok](https://ngrok.com/)). ### HTTP Method We generally recommend going with POST as some additional data may be passed. We will pass parameters for the Webhook as query string variables in `GET` and a request body with `POST`. The examples for this Guide are `POST`. ### Secret Code The secret code allows you to create a more secure connection to the Webhook. We'll pass the secret code in an HTTP Header called `Pactsafe-Webhook-Token`. This field is optional and only necessary for an extra level of security and confirmation that the webhook is coming from the Ironclad Clickwrap platform. ### Webhook Event Select the event that you want to be notified about - [here](https://clickwrap-developer.ironcladapp.com/docs/webhook-events) is an exhaustive list of all available webhooks and example payloads.