PingOne Platform APIs

Create Agreement

 

POST {{apiPath}}/environments/{{envID}}/agreements

The POST {{apiPath}}/environments/{{envID}}/agreements endpoint creates a new agreement resource in the specified environment.

The request body must include a unique name property value, and it can also include the reconsentPeriodDays property, which is an optional property to specify the number of days before the user must provide consent to the terms of service again.

Prerequisites

Request Model

For property descriptions, refer to Agreements data model.

Property Type Required?

description

String

Optional

enabled

Boolean

Required

name

String

Required

reconsentPeriodDays

Integer

Optional

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

Body

raw ( application/json )

{
  "name": "Agreement_2",
  "description": "Terms of service agreement",
  "reconsentPeriodDays": 180,
  "enabled": false
}

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff '{{apiPath}}/environments/{{envID}}/agreements' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
  "name": "Agreement_2",
  "description": "Terms of service agreement",
  "reconsentPeriodDays": 180,
  "enabled": false
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/agreements")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Post);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer {{accessToken}}");
var body = @"{" + "\n" +
@"  ""name"": ""Agreement_2""," + "\n" +
@"  ""description"": ""Terms of service agreement""," + "\n" +
@"  ""reconsentPeriodDays"": 180," + "\n" +
@"  ""enabled"": false" + "\n" +
@"}";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io"
)

func main() {

  url := "{{apiPath}}/environments/{{envID}}/agreements"
  method := "POST"

  payload := strings.NewReader(`{
  "name": "Agreement_2",
  "description": "Terms of service agreement",
  "reconsentPeriodDays": 180,
  "enabled": false
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")
  req.Header.Add("Authorization", "Bearer {{accessToken}}")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
POST /environments/{{envID}}/agreements HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}

{
  "name": "Agreement_2",
  "description": "Terms of service agreement",
  "reconsentPeriodDays": 180,
  "enabled": false
}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n  \"name\": \"Agreement_2\",\n  \"description\": \"Terms of service agreement\",\n  \"reconsentPeriodDays\": 180,\n  \"enabled\": false\n}");
Request request = new Request.Builder()
  .url("{{apiPath}}/environments/{{envID}}/agreements")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer {{accessToken}}")
  .build();
Response response = client.newCall(request).execute();
var settings = {
  "url": "{{apiPath}}/environments/{{envID}}/agreements",
  "method": "POST",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "name": "Agreement_2",
    "description": "Terms of service agreement",
    "reconsentPeriodDays": 180,
    "enabled": false
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'POST',
  'url': '{{apiPath}}/environments/{{envID}}/agreements',
  'headers': {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "name": "Agreement_2",
    "description": "Terms of service agreement",
    "reconsentPeriodDays": 180,
    "enabled": false
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
import requests
import json

url = "{{apiPath}}/environments/{{envID}}/agreements"

payload = json.dumps({
  "name": "Agreement_2",
  "description": "Terms of service agreement",
  "reconsentPeriodDays": 180,
  "enabled": False
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer {{accessToken}}'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{apiPath}}/environments/{{envID}}/agreements');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Content-Type' => 'application/json',
  'Authorization' => 'Bearer {{accessToken}}'
));
$request->setBody('{\n  "name": "Agreement_2",\n  "description": "Terms of service agreement",\n  "reconsentPeriodDays": 180,\n  "enabled": false\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
require "uri"
require "json"
require "net/http"

url = URI("{{apiPath}}/environments/{{envID}}/agreements")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer {{accessToken}}"
request.body = JSON.dump({
  "name": "Agreement_2",
  "description": "Terms of service agreement",
  "reconsentPeriodDays": 180,
  "enabled": false
})

response = http.request(request)
puts response.read_body
let parameters = "{\n  \"name\": \"Agreement_2\",\n  \"description\": \"Terms of service agreement\",\n  \"reconsentPeriodDays\": 180,\n  \"enabled\": false\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/agreements")!,timeoutInterval: Double.infinity)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("Bearer {{accessToken}}", forHTTPHeaderField: "Authorization")

request.httpMethod = "POST"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()

Example Response

201 Created

{
    "_links": {
        "self": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/agreements/49d7aa39-41a0-4a6d-bafd-84cc5abf98f5"
        },
        "environment": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        }
    },
    "id": "49d7aa39-41a0-4a6d-bafd-84cc5abf98f5",
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "name": "Agreement_2",
    "description": "Terms of service agreement",
    "reconsentPeriodDays": 180,
    "enabled": false
}