Sample code for 30+ languages & platforms
Dart

Amazon Cognito - Create User Pool

See more Amazon Cognito Examples

Creates a new Amazon Cognito user pool and sets the password policy for the pool.

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // This example requires the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  final rest = CkRest();

  final authAws = CkAuthAws();
  authAws.accessKey = 'AWS_ACCESS_KEY';
  authAws.secretKey = 'AWS_SECRET_KEY';
  // Don't forget to change the region to your particular region. (Also make the same change in the call to Connect below.)
  authAws.region = 'us-west-2';
  authAws.serviceName = 'cognito-idp';
  // SetAuthAws causes Chilkat to automatically add the following headers: Authorization, X-Amz-Date
  rest.setAuthAws(authAws);

  // URL: https://cognito-idp.us-west-2.amazonaws.com/
  final bTls = true;
  final port = 443;
  final bAutoReconnect = true;
  // Use the same region as specified above.
  try {
    rest.connect('cognito-idp.us-west-2.amazonaws.com', port, bTls, bAutoReconnect);
  } on ChilkatException catch (e) {
    print('ConnectFailReason: ${rest.connectFailReason}');
    print(e.lastErrorText);
    return;
  }

  // Note: The above code does not need to be repeatedly called for each REST request.
  // The rest object can be setup once, and then many requests can be sent.  Chilkat will automatically
  // reconnect within a FullRequest* method as needed.  It is only the very first connection that is explicitly
  // made via the Connect method.

  // Use this online tool to generate code from sample JSON:
  // Generate Code to Create JSON

  // The following JSON is sent in the request body.
  // This example wil demonstrate creating a pool with many options specified.
  // The only required JSON member is "PoolName".

  // {
  //     "AccountRecoverySetting": {
  //       "RecoveryMechanisms": [
  //         {
  //           "Name": "verified_phone_number",
  //           "Priority": 1
  //         },
  //         {
  //           "Name": "verified_email",
  //           "Priority": 2
  //         }
  //       ]
  //     },
  //     "AdminCreateUserConfig": {
  //       "AllowAdminCreateUserOnly": false,
  //       "InviteMessageTemplate": {
  //         "EmailMessage": "Your username is {username} and temporary password is {####}. ",
  //         "EmailSubject": "Your temporary password",
  //         "SMSMessage": "Your username is {username} and temporary password is {####}. "
  //       },
  //       "TemporaryPasswordValidityDays": 7
  //     },
  //     "AutoVerifiedAttributes": [
  //       "email",
  //       "phone_number"
  //     ],
  //     "EmailConfiguration": {
  //       "EmailSendingAccount": "DEVELOPER",
  //       "From": "joe@example.com",
  //       "ReplyToEmailAddress": "joe@example.com",
  //       "SourceArn": "arn:aws:ses:us-west-2:954491834127:identity/joe@example.com"
  //     },
  //     "EmailVerificationMessage": "Your verification code is {####}. ",
  //     "EmailVerificationSubject": "Your verification code",
  //     "LambdaConfig": {},
  //     "MfaConfiguration": "OFF",
  //     "PoolName": "MyTestPool",
  //     "Policies": {
  //       "PasswordPolicy": {
  //         "MinimumLength": 8,
  //         "RequireLowercase": true,
  //         "RequireNumbers": true,
  //         "RequireSymbols": true,
  //         "RequireUppercase": true,
  //         "TemporaryPasswordValidityDays": 7
  //       }
  //     },
  //     "Schema": [
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": false,
  //         "Name": "sub",
  //         "Required": true,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "1"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "name",
  //         "Required": false,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "0"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "given_name",
  //         "Required": false,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "0"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "family_name",
  //         "Required": false,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "0"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "middle_name",
  //         "Required": false,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "0"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "nickname",
  //         "Required": false,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "0"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "preferred_username",
  //         "Required": false,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "0"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "profile",
  //         "Required": false,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "0"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "picture",
  //         "Required": false,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "0"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "website",
  //         "Required": false,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "0"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "email",
  //         "Required": true,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "0"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "Boolean",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "email_verified",
  //         "Required": false
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "gender",
  //         "Required": false,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "0"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "birthdate",
  //         "Required": false,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "10",
  //           "MinLength": "10"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "zoneinfo",
  //         "Required": false,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "0"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "locale",
  //         "Required": false,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "0"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "phone_number",
  //         "Required": false,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "0"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "String",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "address",
  //         "Required": false,
  //         "StringAttributeConstraints": {
  //           "MaxLength": "2048",
  //           "MinLength": "0"
  //         }
  //       },
  //       {
  //         "AttributeDataType": "Number",
  //         "DeveloperOnlyAttribute": false,
  //         "Mutable": true,
  //         "Name": "updated_at",
  //         "NumberAttributeConstraints": {
  //           "MinValue": "0"
  //         },
  //         "Required": false
  //       }
  //     ],
  //     "SmsAuthenticationMessage": "Your verification code is {####}. ",
  //     "SmsConfiguration": {
  //       "ExternalId": "94b17737-216b-4cf7-a29e-17e990e91300",
  //       "SnsCallerArn": "arn:aws:iam::954491834127:role/service-role/chilkat-SMS-Role"
  //     },
  //     "SmsVerificationMessage": "Your verification code is {####}. ",
  //     "UsernameConfiguration": {
  //       "CaseSensitive": false
  //     },
  //     "VerificationMessageTemplate": {
  //       "DefaultEmailOption": "CONFIRM_WITH_CODE",
  //       "EmailMessage": "Your verification code is {####}. ",
  //       "EmailSubject": "Your verification code",
  //       "SmsMessage": "Your verification code is {####}. "
  //     }
  //   }
  // 

  final json = CkJsonObject();
  json.updateString('AccountRecoverySetting.RecoveryMechanisms[0].Name', 'verified_phone_number');
  json.updateInt('AccountRecoverySetting.RecoveryMechanisms[0].Priority', 1);
  json.updateString('AccountRecoverySetting.RecoveryMechanisms[1].Name', 'verified_email');
  json.updateInt('AccountRecoverySetting.RecoveryMechanisms[1].Priority', 2);
  json.updateBool('AdminCreateUserConfig.AllowAdminCreateUserOnly', false);
  json.updateString('AdminCreateUserConfig.InviteMessageTemplate.EmailMessage', 'Your username is {username} and temporary password is {####}. ');
  json.updateString('AdminCreateUserConfig.InviteMessageTemplate.EmailSubject', 'Your temporary password');
  json.updateString('AdminCreateUserConfig.InviteMessageTemplate.SMSMessage', 'Your username is {username} and temporary password is {####}. ');
  json.updateInt('AdminCreateUserConfig.TemporaryPasswordValidityDays', 7);
  json.updateString('AutoVerifiedAttributes[0]', 'email');
  json.updateString('AutoVerifiedAttributes[1]', 'phone_number');
  json.updateString('EmailConfiguration.EmailSendingAccount', 'DEVELOPER');
  json.updateString('EmailConfiguration.From', 'joe@example.com');
  json.updateString('EmailConfiguration.ReplyToEmailAddress', 'joe@example.com');
  json.updateString('EmailConfiguration.SourceArn', 'arn:aws:ses:us-west-2:954491834127:identity/joe@example.com');
  json.updateString('EmailVerificationMessage', 'Your verification code is {####}. ');
  json.updateString('EmailVerificationSubject', 'Your verification code');
  json.updateNewObject('LambdaConfig');
  json.updateString('MfaConfiguration', 'OFF');
  json.updateString('PoolName', 'MyTestPool');
  json.updateInt('Policies.PasswordPolicy.MinimumLength', 8);
  json.updateBool('Policies.PasswordPolicy.RequireLowercase', true);
  json.updateBool('Policies.PasswordPolicy.RequireNumbers', true);
  json.updateBool('Policies.PasswordPolicy.RequireSymbols', true);
  json.updateBool('Policies.PasswordPolicy.RequireUppercase', true);
  json.updateInt('Policies.PasswordPolicy.TemporaryPasswordValidityDays', 7);
  json.updateString('Schema[0].AttributeDataType', 'String');
  json.updateBool('Schema[0].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[0].Mutable', false);
  json.updateString('Schema[0].Name', 'sub');
  json.updateBool('Schema[0].Required', true);
  json.updateString('Schema[0].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[0].StringAttributeConstraints.MinLength', '1');
  json.updateString('Schema[1].AttributeDataType', 'String');
  json.updateBool('Schema[1].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[1].Mutable', true);
  json.updateString('Schema[1].Name', 'name');
  json.updateBool('Schema[1].Required', false);
  json.updateString('Schema[1].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[1].StringAttributeConstraints.MinLength', '0');
  json.updateString('Schema[2].AttributeDataType', 'String');
  json.updateBool('Schema[2].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[2].Mutable', true);
  json.updateString('Schema[2].Name', 'given_name');
  json.updateBool('Schema[2].Required', false);
  json.updateString('Schema[2].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[2].StringAttributeConstraints.MinLength', '0');
  json.updateString('Schema[3].AttributeDataType', 'String');
  json.updateBool('Schema[3].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[3].Mutable', true);
  json.updateString('Schema[3].Name', 'family_name');
  json.updateBool('Schema[3].Required', false);
  json.updateString('Schema[3].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[3].StringAttributeConstraints.MinLength', '0');
  json.updateString('Schema[4].AttributeDataType', 'String');
  json.updateBool('Schema[4].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[4].Mutable', true);
  json.updateString('Schema[4].Name', 'middle_name');
  json.updateBool('Schema[4].Required', false);
  json.updateString('Schema[4].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[4].StringAttributeConstraints.MinLength', '0');
  json.updateString('Schema[5].AttributeDataType', 'String');
  json.updateBool('Schema[5].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[5].Mutable', true);
  json.updateString('Schema[5].Name', 'nickname');
  json.updateBool('Schema[5].Required', false);
  json.updateString('Schema[5].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[5].StringAttributeConstraints.MinLength', '0');
  json.updateString('Schema[6].AttributeDataType', 'String');
  json.updateBool('Schema[6].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[6].Mutable', true);
  json.updateString('Schema[6].Name', 'preferred_username');
  json.updateBool('Schema[6].Required', false);
  json.updateString('Schema[6].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[6].StringAttributeConstraints.MinLength', '0');
  json.updateString('Schema[7].AttributeDataType', 'String');
  json.updateBool('Schema[7].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[7].Mutable', true);
  json.updateString('Schema[7].Name', 'profile');
  json.updateBool('Schema[7].Required', false);
  json.updateString('Schema[7].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[7].StringAttributeConstraints.MinLength', '0');
  json.updateString('Schema[8].AttributeDataType', 'String');
  json.updateBool('Schema[8].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[8].Mutable', true);
  json.updateString('Schema[8].Name', 'picture');
  json.updateBool('Schema[8].Required', false);
  json.updateString('Schema[8].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[8].StringAttributeConstraints.MinLength', '0');
  json.updateString('Schema[9].AttributeDataType', 'String');
  json.updateBool('Schema[9].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[9].Mutable', true);
  json.updateString('Schema[9].Name', 'website');
  json.updateBool('Schema[9].Required', false);
  json.updateString('Schema[9].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[9].StringAttributeConstraints.MinLength', '0');
  json.updateString('Schema[10].AttributeDataType', 'String');
  json.updateBool('Schema[10].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[10].Mutable', true);
  json.updateString('Schema[10].Name', 'email');
  json.updateBool('Schema[10].Required', true);
  json.updateString('Schema[10].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[10].StringAttributeConstraints.MinLength', '0');
  json.updateString('Schema[11].AttributeDataType', 'Boolean');
  json.updateBool('Schema[11].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[11].Mutable', true);
  json.updateString('Schema[11].Name', 'email_verified');
  json.updateBool('Schema[11].Required', false);
  json.updateString('Schema[12].AttributeDataType', 'String');
  json.updateBool('Schema[12].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[12].Mutable', true);
  json.updateString('Schema[12].Name', 'gender');
  json.updateBool('Schema[12].Required', false);
  json.updateString('Schema[12].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[12].StringAttributeConstraints.MinLength', '0');
  json.updateString('Schema[13].AttributeDataType', 'String');
  json.updateBool('Schema[13].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[13].Mutable', true);
  json.updateString('Schema[13].Name', 'birthdate');
  json.updateBool('Schema[13].Required', false);
  json.updateString('Schema[13].StringAttributeConstraints.MaxLength', '10');
  json.updateString('Schema[13].StringAttributeConstraints.MinLength', '10');
  json.updateString('Schema[14].AttributeDataType', 'String');
  json.updateBool('Schema[14].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[14].Mutable', true);
  json.updateString('Schema[14].Name', 'zoneinfo');
  json.updateBool('Schema[14].Required', false);
  json.updateString('Schema[14].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[14].StringAttributeConstraints.MinLength', '0');
  json.updateString('Schema[15].AttributeDataType', 'String');
  json.updateBool('Schema[15].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[15].Mutable', true);
  json.updateString('Schema[15].Name', 'locale');
  json.updateBool('Schema[15].Required', false);
  json.updateString('Schema[15].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[15].StringAttributeConstraints.MinLength', '0');
  json.updateString('Schema[16].AttributeDataType', 'String');
  json.updateBool('Schema[16].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[16].Mutable', true);
  json.updateString('Schema[16].Name', 'phone_number');
  json.updateBool('Schema[16].Required', false);
  json.updateString('Schema[16].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[16].StringAttributeConstraints.MinLength', '0');
  json.updateString('Schema[17].AttributeDataType', 'String');
  json.updateBool('Schema[17].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[17].Mutable', true);
  json.updateString('Schema[17].Name', 'address');
  json.updateBool('Schema[17].Required', false);
  json.updateString('Schema[17].StringAttributeConstraints.MaxLength', '2048');
  json.updateString('Schema[17].StringAttributeConstraints.MinLength', '0');
  json.updateString('Schema[18].AttributeDataType', 'Number');
  json.updateBool('Schema[18].DeveloperOnlyAttribute', false);
  json.updateBool('Schema[18].Mutable', true);
  json.updateString('Schema[18].Name', 'updated_at');
  json.updateString('Schema[18].NumberAttributeConstraints.MinValue', '0');
  json.updateBool('Schema[18].Required', false);
  json.updateString('SmsAuthenticationMessage', 'Your verification code is {####}. ');

  // Use your own value here:
  json.updateString('SmsConfiguration.ExternalId', '94b17737-216b-4cf7-a29e-17e990e91300');
  json.updateString('SmsConfiguration.SnsCallerArn', 'arn:aws:iam::954491834127:role/service-role/chilkat-SMS-Role');

  json.updateString('SmsVerificationMessage', 'Your verification code is {####}. ');
  json.updateBool('UsernameConfiguration.CaseSensitive', false);
  json.updateString('VerificationMessageTemplate.DefaultEmailOption', 'CONFIRM_WITH_CODE');
  json.updateString('VerificationMessageTemplate.EmailMessage', 'Your verification code is {####}. ');
  json.updateString('VerificationMessageTemplate.EmailSubject', 'Your verification code');
  json.updateString('VerificationMessageTemplate.SmsMessage', 'Your verification code is {####}. ');

  rest.addHeader('Content-Type', 'application/x-amz-json-1.0');
  rest.addHeader('X-Amz-Target', 'AWSCognitoIdentityProviderService.CreateUserPool');
  rest.addHeader('Accept-Encoding', 'identity');

  final sbRequestBody = CkStringBuilder();
  json.emitSb(sbRequestBody);
  final sbResponseBody = CkStringBuilder();
  try {
    rest.fullRequestSb('POST', '/', sbRequestBody, sbResponseBody);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final respStatusCode = rest.responseStatusCode;
  print('response status code = $respStatusCode');
  if (respStatusCode != 200) {
    print('Response Status Code = $respStatusCode');
    print('Response Header:');
    print(rest.responseHeader);
    print('Response Body:');
    print(sbResponseBody.getAsString());
    return;
  }

  final jsonResponse = CkJsonObject();
  jsonResponse.loadSb(sbResponseBody);

  jsonResponse.emitCompact = false;
  print(jsonResponse.emit());

  // The response is similar to the response at Cognito Describe User Pool
}