summaryrefslogtreecommitdiffstats
path: root/docs/guide
diff options
context:
space:
mode:
authorJorge L. Williams <jorge.williams@rackspace.com>2011-04-14 17:48:31 -0500
committerJorge L. Williams <jorge.williams@rackspace.com>2011-04-14 17:48:31 -0500
commitbe6eda09f221bd65e5e430ba370c9b206196c100 (patch)
tree7a88bbbdcf0bebad5f69100c1df3aabfd1cb67db /docs/guide
parenta84d1711dadba3073a6ac1fef8c86c29784574a4 (diff)
Initial docs import.
Diffstat (limited to 'docs/guide')
-rw-r--r--docs/guide/pom.xml99
-rw-r--r--docs/guide/src/docbkx/idmdevguide.xml1853
-rw-r--r--docs/guide/src/docbkx/idmdevguide.xml~1853
-rw-r--r--docs/guide/src/docbkx/img/Check_mark_23x20_02.svg60
-rw-r--r--docs/guide/src/docbkx/samples/add-baseurl-input.xml11
-rw-r--r--docs/guide/src/docbkx/samples/add-baseurlRef-input.xml6
-rw-r--r--docs/guide/src/docbkx/samples/addclient.json4
-rw-r--r--docs/guide/src/docbkx/samples/addclient.xml6
-rw-r--r--docs/guide/src/docbkx/samples/addedclient.json12
-rw-r--r--docs/guide/src/docbkx/samples/addedclient.xml12
-rw-r--r--docs/guide/src/docbkx/samples/addeduser.json9
-rw-r--r--docs/guide/src/docbkx/samples/addfirstuserresponse.json7
-rw-r--r--docs/guide/src/docbkx/samples/addfirstuserresponse.xml8
-rw-r--r--docs/guide/src/docbkx/samples/adduser.json8
-rw-r--r--docs/guide/src/docbkx/samples/adduser.xml4
-rw-r--r--docs/guide/src/docbkx/samples/adduserresponse.xml5
-rw-r--r--docs/guide/src/docbkx/samples/auth.json48
-rw-r--r--docs/guide/src/docbkx/samples/auth.xml34
-rw-r--r--docs/guide/src/docbkx/samples/auth_credentials.json7
-rw-r--r--docs/guide/src/docbkx/samples/auth_credentials.xml5
-rw-r--r--docs/guide/src/docbkx/samples/bad_request.json5
-rw-r--r--docs/guide/src/docbkx/samples/bad_request.xml7
-rw-r--r--docs/guide/src/docbkx/samples/baseURLRefs.json27
-rw-r--r--docs/guide/src/docbkx/samples/baseURLRefs.xml22
-rw-r--r--docs/guide/src/docbkx/samples/base_url_ref_response.json5
-rw-r--r--docs/guide/src/docbkx/samples/base_url_ref_response.xml6
-rw-r--r--docs/guide/src/docbkx/samples/base_url_response.json10
-rw-r--r--docs/guide/src/docbkx/samples/base_url_response.xml12
-rw-r--r--docs/guide/src/docbkx/samples/base_urls_response.json22
-rw-r--r--docs/guide/src/docbkx/samples/base_urls_response.xml18
-rw-r--r--docs/guide/src/docbkx/samples/choices.json50
-rw-r--r--docs/guide/src/docbkx/samples/choices.xml29
-rw-r--r--docs/guide/src/docbkx/samples/client-credentials-response.json3
-rw-r--r--docs/guide/src/docbkx/samples/client-credentials-response.xml4
-rw-r--r--docs/guide/src/docbkx/samples/client.json16
-rw-r--r--docs/guide/src/docbkx/samples/client.xml17
-rw-r--r--docs/guide/src/docbkx/samples/clientGroup.json4
-rw-r--r--docs/guide/src/docbkx/samples/clientGroup.xml5
-rw-r--r--docs/guide/src/docbkx/samples/clientGroups.json6
-rw-r--r--docs/guide/src/docbkx/samples/clientGroups.xml7
-rw-r--r--docs/guide/src/docbkx/samples/clientWithOnlySoftDeleted.json3
-rw-r--r--docs/guide/src/docbkx/samples/clientWithOnlySoftDeleted.xml4
-rw-r--r--docs/guide/src/docbkx/samples/client_credentials.json3
-rw-r--r--docs/guide/src/docbkx/samples/client_credentials.xml4
-rw-r--r--docs/guide/src/docbkx/samples/clientname_conflict.json5
-rw-r--r--docs/guide/src/docbkx/samples/clientname_conflict.xml7
-rw-r--r--docs/guide/src/docbkx/samples/clients.json22
-rw-r--r--docs/guide/src/docbkx/samples/clients.xml22
-rw-r--r--docs/guide/src/docbkx/samples/customer.json7
-rw-r--r--docs/guide/src/docbkx/samples/customer.xml5
-rw-r--r--docs/guide/src/docbkx/samples/customer_conflict.json5
-rw-r--r--docs/guide/src/docbkx/samples/customer_conflict.xml7
-rw-r--r--docs/guide/src/docbkx/samples/customerlock.json5
-rw-r--r--docs/guide/src/docbkx/samples/customerlock.xml4
-rw-r--r--docs/guide/src/docbkx/samples/customers.json15
-rw-r--r--docs/guide/src/docbkx/samples/customers.xml9
-rw-r--r--docs/guide/src/docbkx/samples/definedpermissions.json16
-rw-r--r--docs/guide/src/docbkx/samples/definedpermissions.xml14
-rw-r--r--docs/guide/src/docbkx/samples/email_conflict.json5
-rw-r--r--docs/guide/src/docbkx/samples/email_conflict.xml7
-rw-r--r--docs/guide/src/docbkx/samples/ext-getuser.json21
-rw-r--r--docs/guide/src/docbkx/samples/ext-getuser.xml13
-rw-r--r--docs/guide/src/docbkx/samples/extension.json21
-rw-r--r--docs/guide/src/docbkx/samples/extension.xml23
-rw-r--r--docs/guide/src/docbkx/samples/extensions.json42
-rw-r--r--docs/guide/src/docbkx/samples/extensions.xml39
-rw-r--r--docs/guide/src/docbkx/samples/feed.xml21
-rw-r--r--docs/guide/src/docbkx/samples/forbidden.json5
-rw-r--r--docs/guide/src/docbkx/samples/forbidden.xml7
-rw-r--r--docs/guide/src/docbkx/samples/forgot_password.json17
-rw-r--r--docs/guide/src/docbkx/samples/forgot_password.xml13
-rw-r--r--docs/guide/src/docbkx/samples/getuser-1.json29
-rw-r--r--docs/guide/src/docbkx/samples/getuser-1.xml14
-rw-r--r--docs/guide/src/docbkx/samples/getuser-with-mosso-id.json20
-rw-r--r--docs/guide/src/docbkx/samples/getuser-with-mosso-id.xml21
-rw-r--r--docs/guide/src/docbkx/samples/getuser-with-nast-id.json20
-rw-r--r--docs/guide/src/docbkx/samples/getuser-with-nast-id.xml21
-rw-r--r--docs/guide/src/docbkx/samples/getuser-with-username.json20
-rw-r--r--docs/guide/src/docbkx/samples/getuser-with-username.xml21
-rw-r--r--docs/guide/src/docbkx/samples/getuser.json15
-rw-r--r--docs/guide/src/docbkx/samples/getuser.xml8
-rw-r--r--docs/guide/src/docbkx/samples/globalgroup.json6
-rw-r--r--docs/guide/src/docbkx/samples/globalgroup.xml5
-rw-r--r--docs/guide/src/docbkx/samples/globalgroups.json10
-rw-r--r--docs/guide/src/docbkx/samples/globalgroups.xml10
-rw-r--r--docs/guide/src/docbkx/samples/grantedpermissions.json16
-rw-r--r--docs/guide/src/docbkx/samples/grantedpermissions.xml14
-rw-r--r--docs/guide/src/docbkx/samples/group-create.json6
-rw-r--r--docs/guide/src/docbkx/samples/group-create.xml5
-rw-r--r--docs/guide/src/docbkx/samples/group-updated-nt.json6
-rw-r--r--docs/guide/src/docbkx/samples/group-updated-nt.xml5
-rw-r--r--docs/guide/src/docbkx/samples/group-updated.json7
-rw-r--r--docs/guide/src/docbkx/samples/group-updated.xml5
-rw-r--r--docs/guide/src/docbkx/samples/group.json7
-rw-r--r--docs/guide/src/docbkx/samples/group.xml5
-rw-r--r--docs/guide/src/docbkx/samples/groups-nt.json12
-rw-r--r--docs/guide/src/docbkx/samples/groups-nt.xml9
-rw-r--r--docs/guide/src/docbkx/samples/groups.json15
-rw-r--r--docs/guide/src/docbkx/samples/groups.xml9
-rw-r--r--docs/guide/src/docbkx/samples/idm_fault.json7
-rw-r--r--docs/guide/src/docbkx/samples/idm_fault.xml6
-rw-r--r--docs/guide/src/docbkx/samples/item_not_found.json7
-rw-r--r--docs/guide/src/docbkx/samples/item_not_found.xml6
-rw-r--r--docs/guide/src/docbkx/samples/methodnotallowedfault.json5
-rw-r--r--docs/guide/src/docbkx/samples/methodnotallowedfault.xml7
-rw-r--r--docs/guide/src/docbkx/samples/missing_username.json5
-rw-r--r--docs/guide/src/docbkx/samples/missing_username.xml7
-rw-r--r--docs/guide/src/docbkx/samples/mosso-id-authentication-response.json4
-rw-r--r--docs/guide/src/docbkx/samples/mosso-id-authentication-response.xml18
-rw-r--r--docs/guide/src/docbkx/samples/mossoCredentials.xml5
-rw-r--r--docs/guide/src/docbkx/samples/nastCredentials.xml5
-rw-r--r--docs/guide/src/docbkx/samples/password_recovery.json15
-rw-r--r--docs/guide/src/docbkx/samples/password_recovery.xml12
-rw-r--r--docs/guide/src/docbkx/samples/password_rule.json5
-rw-r--r--docs/guide/src/docbkx/samples/password_rule.xml6
-rw-r--r--docs/guide/src/docbkx/samples/password_rule_result.json6
-rw-r--r--docs/guide/src/docbkx/samples/password_rule_result.xml7
-rw-r--r--docs/guide/src/docbkx/samples/password_rule_results.json16
-rw-r--r--docs/guide/src/docbkx/samples/password_rule_results.xml15
-rw-r--r--docs/guide/src/docbkx/samples/password_rules.json14
-rw-r--r--docs/guide/src/docbkx/samples/password_rules.xml13
-rw-r--r--docs/guide/src/docbkx/samples/password_validation.json17
-rw-r--r--docs/guide/src/docbkx/samples/password_validation.xml17
-rw-r--r--docs/guide/src/docbkx/samples/passwordrotation.json4
-rw-r--r--docs/guide/src/docbkx/samples/passwordrotation.xml6
-rw-r--r--docs/guide/src/docbkx/samples/passwordvalidationfault.json5
-rw-r--r--docs/guide/src/docbkx/samples/passwordvalidationfault.xml7
-rw-r--r--docs/guide/src/docbkx/samples/permission.json7
-rw-r--r--docs/guide/src/docbkx/samples/permission.xml7
-rw-r--r--docs/guide/src/docbkx/samples/permissions.json30
-rw-r--r--docs/guide/src/docbkx/samples/permissions.xml24
-rw-r--r--docs/guide/src/docbkx/samples/reset_user_password.json3
-rw-r--r--docs/guide/src/docbkx/samples/reset_user_password.xml4
-rw-r--r--docs/guide/src/docbkx/samples/resourceId_conflict.json5
-rw-r--r--docs/guide/src/docbkx/samples/resourceId_conflict.xml7
-rw-r--r--docs/guide/src/docbkx/samples/role.json4
-rw-r--r--docs/guide/src/docbkx/samples/role.xml4
-rw-r--r--docs/guide/src/docbkx/samples/roles.json12
-rw-r--r--docs/guide/src/docbkx/samples/roles.xml8
-rw-r--r--docs/guide/src/docbkx/samples/samplerequestheader.json4
-rw-r--r--docs/guide/src/docbkx/samples/sampleresponseheader.json5
-rw-r--r--docs/guide/src/docbkx/samples/service-catalog-response.json22
-rw-r--r--docs/guide/src/docbkx/samples/service-catalog-response.xml14
-rw-r--r--docs/guide/src/docbkx/samples/tenants-1.json16
-rw-r--r--docs/guide/src/docbkx/samples/tenants-1.xml10
-rw-r--r--docs/guide/src/docbkx/samples/tenants-2.json20
-rw-r--r--docs/guide/src/docbkx/samples/tenants-2.xml13
-rw-r--r--docs/guide/src/docbkx/samples/tenants-3.json16
-rw-r--r--docs/guide/src/docbkx/samples/tenants-3.xml10
-rw-r--r--docs/guide/src/docbkx/samples/token.json4
-rw-r--r--docs/guide/src/docbkx/samples/token.xml5
-rw-r--r--docs/guide/src/docbkx/samples/unauthorized.json5
-rw-r--r--docs/guide/src/docbkx/samples/unauthorized.xml7
-rw-r--r--docs/guide/src/docbkx/samples/unavailable.json5
-rw-r--r--docs/guide/src/docbkx/samples/unavailable.xml6
-rw-r--r--docs/guide/src/docbkx/samples/updatedcustomer.json7
-rw-r--r--docs/guide/src/docbkx/samples/updatedcustomer.xml5
-rw-r--r--docs/guide/src/docbkx/samples/updateduser.json8
-rw-r--r--docs/guide/src/docbkx/samples/updateduser.xml4
-rw-r--r--docs/guide/src/docbkx/samples/updateuser.json6
-rw-r--r--docs/guide/src/docbkx/samples/updateuser.xml3
-rw-r--r--docs/guide/src/docbkx/samples/user.json41
-rw-r--r--docs/guide/src/docbkx/samples/user.xml19
-rw-r--r--docs/guide/src/docbkx/samples/userGroups.json16
-rw-r--r--docs/guide/src/docbkx/samples/userGroups.xml6
-rw-r--r--docs/guide/src/docbkx/samples/userWithOnlyLock.json5
-rw-r--r--docs/guide/src/docbkx/samples/userWithOnlyLock.xml3
-rw-r--r--docs/guide/src/docbkx/samples/userWithOnlySoftDeleted.json3
-rw-r--r--docs/guide/src/docbkx/samples/userWithOnlySoftDeleted.xml4
-rw-r--r--docs/guide/src/docbkx/samples/userWithOnlyStatus.json3
-rw-r--r--docs/guide/src/docbkx/samples/userWithOnlyStatus.xml4
-rw-r--r--docs/guide/src/docbkx/samples/user_api_key.json5
-rw-r--r--docs/guide/src/docbkx/samples/user_api_key.xml3
-rw-r--r--docs/guide/src/docbkx/samples/user_credentials.json8
-rw-r--r--docs/guide/src/docbkx/samples/user_credentials.xml6
-rw-r--r--docs/guide/src/docbkx/samples/user_disabled.json5
-rw-r--r--docs/guide/src/docbkx/samples/user_disabled.xml7
-rw-r--r--docs/guide/src/docbkx/samples/user_password.json3
-rw-r--r--docs/guide/src/docbkx/samples/user_password.xml4
-rw-r--r--docs/guide/src/docbkx/samples/user_secret.json4
-rw-r--r--docs/guide/src/docbkx/samples/user_secret.xml5
-rw-r--r--docs/guide/src/docbkx/samples/usernameCredentials.xml5
-rw-r--r--docs/guide/src/docbkx/samples/username_conflict.json5
-rw-r--r--docs/guide/src/docbkx/samples/username_conflict.xml7
-rw-r--r--docs/guide/src/docbkx/samples/users.json17
-rw-r--r--docs/guide/src/docbkx/samples/users.xml7
-rw-r--r--docs/guide/src/docbkx/samples/validatetoken.json19
-rw-r--r--docs/guide/src/docbkx/samples/validatetoken.xml10
-rw-r--r--docs/guide/src/docbkx/samples/version-atom.xml19
-rw-r--r--docs/guide/src/docbkx/samples/version.json33
-rw-r--r--docs/guide/src/docbkx/samples/version.xml23
-rw-r--r--docs/guide/src/docbkx/samples/versions-atom.xml22
-rw-r--r--docs/guide/src/docbkx/samples/versions.json28
-rw-r--r--docs/guide/src/docbkx/samples/versions.xml18
194 files changed, 5982 insertions, 0 deletions
diff --git a/docs/guide/pom.xml b/docs/guide/pom.xml
new file mode 100644
index 00000000..ec944cf4
--- /dev/null
+++ b/docs/guide/pom.xml
@@ -0,0 +1,99 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>com.rackspace.idm</groupId>
+ <artifactId>docs</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <packaging>jar</packaging>
+
+ <name>docs</name>
+ <url>http://maven.apache.org</url>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-impl</artifactId>
+ <version>2.1.12</version>
+ </dependency>
+ <dependency>
+ <groupId>com.thoughtworks.xstream</groupId>
+ <artifactId>xstream</artifactId>
+ <version>1.3.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.jettison</groupId>
+ <artifactId>jettison</artifactId>
+ <version>1.1</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <resources>
+ <resource>
+ <directory>target/docbkx/pdf</directory>
+ <excludes>
+ <exclude>**/*.fo</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>com.rackspace.cloud.api</groupId>
+ <artifactId>clouddocs-maven-plugin</artifactId>
+ <version>1.0.4-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate-pdf</goal>
+ <goal>generate-webhelp</goal>
+ </goals>
+ <phase>generate-sources</phase>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>org.docbook</groupId>
+ <artifactId>docbook-xml</artifactId>
+ <version>4.4</version>
+ <scope>runtime</scope>
+ </dependency>
+ </dependencies>
+ <configuration>
+ <xincludeSupported>true</xincludeSupported>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <profiles>
+ <profile>
+ <id>Rackspace Research Repositories</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <repositories>
+ <repository>
+ <id>rackspace-research</id>
+ <name>Rackspace Research Repository</name>
+ <url>http://maven.research.rackspacecloud.com/content/groups/public/</url>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>rackspace-research</id>
+ <name>Rackspace Research Repository</name>
+ <url>http://maven.research.rackspacecloud.com/content/groups/public/</url>
+ </pluginRepository>
+ </pluginRepositories>
+ </profile>
+</profiles>
+</project>
diff --git a/docs/guide/src/docbkx/idmdevguide.xml b/docs/guide/src/docbkx/idmdevguide.xml
new file mode 100644
index 00000000..406bbf2c
--- /dev/null
+++ b/docs/guide/src/docbkx/idmdevguide.xml
@@ -0,0 +1,1853 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE book [<!-- Some useful entities borrowed from HTML -->
+ <!ENTITY ndash "–">
+ <!ENTITY mdash "—">
+ <!ENTITY hellip "…">
+
+ <!-- Useful for describing APIs -->
+ <!ENTITY GET '<command xmlns="http://docbook.org/ns/docbook">GET</command>'>
+ <!ENTITY PUT '<command xmlns="http://docbook.org/ns/docbook">PUT</command>'>
+ <!ENTITY POST '<command xmlns="http://docbook.org/ns/docbook">POST</command>'>
+ <!ENTITY DELETE '<command xmlns="http://docbook.org/ns/docbook">DELETE</command>'>
+
+
+ <!ENTITY CHECK '<inlinemediaobject xmlns="http://docbook.org/ns/docbook">
+ <imageobject>
+ <imagedata fileref="img/Check_mark_23x20_02.svg"
+ format="SVG" scale="60"/>
+ </imageobject>
+ </inlinemediaobject>'>
+ <!ENTITY CODES 'Normal Response Code(s):'>
+ <!ENTITY ERROR_CODES 'Error Response Code(s):'>
+ <!ENTITY NO_REQUEST '<para xmlns="http://docbook.org/ns/docbook">
+ This operation does not require a request body.</para>'>
+ <!ENTITY LONG_URI_REFHEAD '
+ <thead xmlns="http://docbook.org/ns/docbook">
+ <tr>
+ <td colspan="1">Verb</td>
+ <td colspan="4">URI</td>
+ <td colspan="3">Description</td>
+ </tr>
+ </thead>'>
+ <!ENTITY URI_REFHEAD '
+ <thead xmlns="http://docbook.org/ns/docbook">
+ <tr>
+ <td colspan="1">Verb</td>
+ <td colspan="1">URI</td>
+ <td colspan="4">Description</td>
+ </tr>
+ </thead>'>
+]>
+<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:html="http://www.w3.org/1999/xhtml"
+ xmlns:db="http://docbook.org/ns/docbook" version="5.0" status="draft">
+ <title>Cloud Identity Developer Guide</title>
+ <info>
+ <author>
+ <personname>
+ <firstname/>
+ <surname/>
+ </personname>
+ <affiliation>
+ <orgname>Rackspace Cloud</orgname>
+ </affiliation>
+ </author>
+ <copyright>
+ <year>2010</year>
+ <year>2011</year>
+ <holder>Rackspace Hosting, Inc.</holder>
+ </copyright>
+ <releaseinfo>API v1.0</releaseinfo>
+ <productname>Cloud Identity</productname>
+ <pubdate>2011-04-11</pubdate>
+ <legalnotice role="apache2">
+ <annotation>
+ <remark>Copyright details are filled in by the template.</remark>
+ </annotation>
+ </legalnotice>
+ <abstract>
+ <para> This document is intended for software developers interested in developing applications
+ which utilizes Organization Identity Management System as the authentication engine. It includes
+ details on how to integrate with IdM. </para>
+ </abstract>
+ </info>
+ <chapter>
+ <title>Overview</title>
+ <para>The IdM Service allows Rackspace Applications to obtain tokens that can be used to access
+ resources in the Rackspace Cloud. This document is intended for: </para>
+ <variablelist>
+ <varlistentry>
+ <term>Service Developers</term>
+ <listitem>
+ <para> Service developers are interested in writing client for Rackspace IdM service.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <para> This Guide assumes the reader is familiar with RESTful web services, HTTP/1.1, and JSON
+ and/or XML serialization formats. </para>
+ </chapter>
+ <chapter>
+ <title>Concepts</title>
+ <para> The IdM system has several key concepts that are important to understand: </para>
+ <section>
+ <title>Token</title>
+ <para>
+ A token is an arbitrary bit of text that is used to access
+ resources. Each token has a scope which describes which
+ resources are accessible with it. A token may be
+ revoked at anytime and is valid for a finite duration.
+ </para>
+ </section>
+ <section>
+ <title>Tenant</title>
+ <para>
+ Depending on the operator, a tenant may map to a customer,
+ account, organization, or project. Users are always placed
+ under a tenant.
+ </para>
+ </section>
+ <section>
+ <title>User</title>
+ <para>
+ Individuals under a tenant. Users have a login and may be
+ assigned tokens to access resources.
+ </para>
+ </section>
+ <section>
+ <title>Tenant Group</title>
+ <para>
+ A group of users under a tenant. Tenant groups are managed
+ by tenants. They are used to organize and assign
+ privileges to group of related users. For example a tenant
+ may add administrator privileges to users in the "admin" group.
+ </para>
+ </section>
+ <section>
+ <title>Global Group</title>
+ <para>
+ A global group of users. Global groups are managed by
+ operators. They are used to organize and assign privileges
+ to a group of related users. For example, an operator may
+ create a "delinquent" group, which will assign limited
+ privileges to users who have past due bills.
+ </para>
+ </section>
+ </chapter>
+ <chapter>
+ <title>General API Information</title>
+ <para>The IdM API is implemented using a RESTful web service interface. All requests to
+ authenticate and operate against the IdM API are performed using SSL over HTTP (HTTPS) on TCP
+ port 443.</para>
+ <section>
+ <title>Request/Response Types</title>
+ <para> The IdM API supports both the JSON and XML data serialization formats. The request
+ format is specified using the <code>Content-Type</code> header and is required for
+ operations that have a request body. The response format can be specified in requests using
+ either the <code>Accept</code> header or adding an <code>.xml</code> or <code>.json</code>
+ extension to the request URI. Note that it is possible for a response to be serialized using
+ a format different from the request (see example below). If no response format is specified,
+ JSON is the default. If conflicting formats are specified using both an <code>Accept</code>
+ header and a query extension, the query extension takes precedence.</para>
+ <table rules="all">
+ <caption>Response Types</caption>
+ <thead>
+ <tr>
+ <td>Format</td>
+ <td>Accept Header</td>
+ <td>Query Extension</td>
+ <td>Default</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>JSON</td>
+ <td>application/json</td>
+ <td>.json</td>
+ <td>Yes</td>
+ </tr>
+ <tr>
+ <td>XML</td>
+ <td>application/xml</td>
+ <td>.xml</td>
+ <td>No</td>
+ </tr>
+ </tbody>
+ </table>
+ <example>
+ <title>JSON Request with Headers</title>
+ <programlisting language="xml">
+<xi:include href="samples/samplerequestheader.json" parse="text"/>
+</programlisting>
+ <programlisting language="xml">
+<xi:include href="samples/auth_credentials.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML Response with Headers</title>
+ <programlisting language="xml">
+<xi:include href="samples/sampleresponseheader.json" parse="text"/>
+</programlisting>
+ <programlisting language="xml">
+<xi:include href="samples/auth.xml" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Content Compression</title>
+ <para>Request and response body data my be encoded with gzip compression in order to
+ accelerate interactive performance of API calls and responses. This is controlled using the
+ <code>Accept-Encoding</code> header on the request from the client and indicated by the
+ <code>Content-Encoding</code> header in the server response. Unless the header is
+ explicitly set, encoding defaults to disabled.</para>
+ <table rules="all">
+ <caption>Compression Headers</caption>
+ <thead>
+ <tr>
+ <td>Header Type</td>
+ <td>Name</td>
+ <td>Value</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>HTTP/1.1 Request</td>
+ <td>Accept-Encoding</td>
+ <td>gzip</td>
+ </tr>
+ <tr>
+ <td>HTTP/1.1 Response</td>
+ <td>Content-Encoding</td>
+ <td>gzip</td>
+ </tr>
+ </tbody>
+ </table>
+ </section>
+ <section>
+ <title>Paginated Collections</title>
+ <para>
+ To reduce load on the service, list operations will
+ return a maximum number of items at a time. The
+ maximum number of items returned is determined by the
+ IDM provider. To navigate the collection, the
+ parameters <parameter>limit</parameter> and
+ <parameter>marker</parameter> can be set in the URI
+ (e.g.?<parameter>limit</parameter>=100&amp;<parameter>marker</parameter>=1234).
+ The <parameter>marker</parameter> parameter is the ID
+ of the last item in the previous list. Items are
+ sorted by update time. When an update time is not
+ available they are sorted by ID. The
+ <parameter>limit</parameter> parameter sets the page
+ size. Both parameters are optional. If the client
+ requests a <parameter>limit</parameter> beyond that
+ which is supported by the deployment an overLimit
+ (<errorcode>413</errorcode>) fault may be thrown. A
+ marker with an invalid ID will return an itemNotFound
+ (<errorcode>404</errorcode>) fault.
+ </para>
+ <note>
+ <para>
+ Paginated collections never return itemNotFound
+ (<errorcode>404</errorcode>) faults when the
+ collection is empty &mdash; clients should expect
+ an empty collection.
+ </para>
+ </note>
+ <para>
+ For convenience, collections contain atom "next" and
+ "previous" links. The first page in the list will not
+ contain a "previous" link, the last page in the list
+ will not contain a "next" link. The following examples
+ illustrate three pages in a collection of tenants. The
+ first page was retrieved via a &GET; to
+ http://idm.api.openstack.org/v1.0/1234/tenants?limit=1.
+ In these examples, the <parameter>limit</parameter>
+ parameter sets the page size to a single item.
+ Subsequent "next" and "previous" links will honor the
+ initial page size. Thus, a client may follow links to
+ traverse a paginated collection without having to
+ input the <parameter>marker</parameter> parameter.
+ </para>
+ <example>
+ <title>Tenant Collection, First Page: XML</title>
+ <programlisting language="xml">
+<xi:include href="samples/tenants-1.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Tenant Collection, First Page: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="samples/tenants-1.json" parse="text"/></programlisting>
+ </example>
+ <example>
+ <title>Tenant Collection, Second Page: XML</title>
+ <programlisting language="xml">
+<xi:include href="samples/tenants-2.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Tenant Collection, Second Page: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="samples/tenants-2.json" parse="text"/></programlisting>
+ </example>
+ <example>
+ <title>Tenant Collection, Last Page: XML</title>
+ <programlisting language="xml">
+<xi:include href="samples/tenants-3.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Tenant Collection, Last Page: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="samples/tenants-3.json" parse="text"/></programlisting>
+ </example>
+ <para>
+ In the JSON representation, paginated collections contain
+ a <property>values</property> property that contains the
+ items in the collections. Links are accessed via the
+ <property>links</property> property. The approach allows
+ for extensibility of both the collection members and of
+ the paginated collection itself. It also allows
+ collections to be embedded in other objects as illustrated
+ below. Here, a subset of grups are presented within a
+ user. Clients must follow the "next" link to continue to
+ retrive additonal groups belonging to a user.
+ </para>
+ <example>
+ <title>Paginated Groups in a User: XML</title>
+ <programlisting language="xml">
+<xi:include href="samples/getuser-1.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Paginated Groups in an User: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="samples/getuser-1.json" parse="text"/></programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Versions</title>
+ <para>
+ The OpenStack IDM API uses both a URI and a MIME
+ type versioning scheme. In the URI scheme, the first
+ element of the path contains the target version
+ identifier (e.g. https://idm.api.openstack.org/
+ v1.0/&hellip;). The MIME type versioning scheme uses
+ HTTP content negotiation where the <code>Accept</code>
+ or <code>Content-Type</code> headers contains a MIME
+ type that identifies the version
+ (application/vnd.openstack.idm-v1.1+xml). A
+ version MIME type is always linked to a base MIME type
+ (application/xml or application/json). If conflicting
+ versions are specified using both an HTTP header and a
+ URI, the URI takes precedence.
+ </para>
+ <example>
+ <title>Request with MIME type versioning</title>
+ <literallayout class="monospaced">
+GET /tenants HTTP/1.1
+Host: idm.api.openstack.org
+Accept: application/vnd.openstack.idm-v1.1+xml
+X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb
+ </literallayout>
+ </example>
+ <example>
+ <title>Request with URI versioning</title>
+ <literallayout class="monospaced">
+GET /v1.1/tenants HTTP/1.1
+Host: idm.api.openstack.org
+Accept: application/xml
+X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb
+ </literallayout>
+ </example>
+ <note>
+ <para>
+ The MIME type versioning approach allows for the
+ creating of permanent links, because the version
+ scheme is not specified in the URI path:
+ https://api.idm.openstack.org/tenants/12234.
+ </para>
+ </note>
+ <para>
+ If a request is made without a version specified in
+ the URI or via HTTP headers, then a multiple-choices
+ response (<returnvalue>300</returnvalue>) will follow
+ providing links and MIME types to available versions.
+ </para>
+ <example>
+ <title>Multiple Choices Response: XML</title>
+ <programlisting language="xml">
+<xi:include href="samples/choices.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Multiple Choices Response: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="samples/choices.json" parse="text"/></programlisting>
+ </example>
+ <para>
+ New features and functionality that do not break
+ API-compatibility will be introduced in the current
+ version of the API as extensions (see below) and the
+ URI and MIME types will remain unchanged. Features or
+ functionality changes that would necessitate a break
+ in API-compatibility will require a new version, which
+ will result in URI and MIME type version being updated
+ accordingly. When new API versions are released, older
+ versions will be marked as
+ <code>DEPRECATED</code>. Providers should work with
+ developers and partners to ensure there is adequate
+ time to migrate to the new version before deprecated
+ versions are discontinued.
+ </para>
+ <para>
+ Your application can programmatically determine
+ available API versions by performing a &GET; on the
+ root URL (i.e. with the version and everything to the
+ right of it truncated) returned from the
+ authentication system. Note that an Atom
+ representation of the versions resources is supported
+ when issuing a request with the <code>Accept</code>
+ header containing application/atom+xml or by adding a
+ .atom to the request URI. This allows standard Atom
+ clients to track version changes.
+ </para>
+ <example>
+ <title>Versions List Request</title>
+ <literallayout class="monospaced">
+GET HTTP/1.1
+Host: idm.api.openstack.org
+ </literallayout>
+ </example>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; badRequest
+ (<errorcode>400</errorcode>), idmFault
+ (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>Versions List Response: XML</title>
+ <programlisting language="xml">
+<xi:include href="samples/versions.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Versions List Response: Atom</title>
+ <programlisting language="xml">
+<xi:include href="samples/versions-atom.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Versions List Response: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="samples/versions.json" parse="text"/></programlisting>
+ </example>
+ <para>
+ You can also obtain additional information about a
+ specific version by performing a &GET; on the base
+ version URL
+ (e.g. https://idm.api.openstack.org/v1.1/).
+ Version request URLs should always end with a trailing
+ slash (/). If the slash is omitted, the server may
+ respond with a <returnvalue>302</returnvalue>
+ redirection request. Format extensions may be placed
+ after the slash
+ (e.g. https://idm.api.openstack.org/v1.1/.xml). Note
+ that this is a special case that does not hold true
+ for other API requests. In general, requests such as
+ /tenants.xml and /tenants/.xml are handled
+ equivalently.
+ </para>
+ <example>
+ <title>Version Details Request</title>
+ <literallayout class="monospaced">
+GET HTTP/1.1
+Host: idm.api.openstack.org/v1.1/
+ </literallayout>
+ </example>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; badRequest
+ (<errorcode>400</errorcode>), idmFault
+ (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>Version Details Response: XML</title>
+ <programlisting language="xml">
+<xi:include href="samples/version.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Version Details Response: Atom</title>
+ <programlisting language="xml">
+<xi:include href="samples/version-atom.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Version Details Response: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="samples/version.json" parse="text"/></programlisting>
+ </example>
+ <para>
+ The detailed version response contains pointers to
+ both a human-readable and a machine-processable
+ description of the API service. The machine-processable description is written in the Web
+ Application Description Language (WADL).
+ </para>
+ <note>
+ <para>If there is a discrepancy between the two specifications, the WADL is
+ authoritative as it contains the most accurate and up-to-date description of the
+ API service. </para>
+ </note>
+ </section>
+ <section>
+ <title>Extensions</title>
+ <para>
+ The OpenStack IDM API is extensible. Extensions
+ serve two purposes: They allow the introduction of new
+ features in the API without requiring a version change
+ and they allow the introduction of vendor specific
+ niche functionality. Applications can programmatically
+ determine what extensions are available by performing
+ a &GET; on the /extensions URI. Note that this is a
+ versioned request &mdash; that is, an extension
+ available in one API version may not be available in
+ another.
+ </para>
+ <informaltable rules="all">
+ <thead>
+ <tr>
+ <td colspan="1">Verb</td>
+ <td colspan="2">URI</td>
+ <td colspan="3">Description</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td colspan="1">&GET;</td>
+ <td colspan="2">/extensions</td>
+ <td colspan="3">Returns a list of available extensions</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <para>
+ Each extension is identified by two unique identifiers, a
+ <property>namespace</property> and an
+ <property>alias</property>. Additionally an extension
+ contains documentation links in various formats.
+ </para>
+ <example>
+ <title>Extensions Response: XML</title>
+ <programlisting language="xml">
+<xi:include href="samples/extensions.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Extensions Response: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="samples/extensions.json" parse="text"/></programlisting>
+ </example>
+ <para>
+ Extensions may also be queried individually by their
+ unique alias. This provides the simplest method of
+ checking if an extension is available as an unavailable
+ extension will issue an itemNotFound
+ (<errorcode>404</errorcode>) response.
+ </para>
+ <informaltable rules="all">
+ <thead>
+ <tr>
+ <td colspan="1">Verb</td>
+ <td colspan="2">URI</td>
+ <td colspan="3">Description</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td colspan="1">&GET;</td>
+ <td colspan="2">/extensions/<parameter>alias</parameter></td>
+ <td colspan="3">Return details of a single extension</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>Extension Response: xml</title>
+ <programlisting language="xml">
+<xi:include href="samples/extension.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Extensions Response: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="samples/extension.json" parse="text"/></programlisting>
+ </example>
+ <para>
+ Extensions may define new data types, parameters, actions,
+ headers, states, and resources. In XML, additional
+ elements and attributes may be defined. These elements
+ must be defined in the extension's namespace. In JSON, the
+ alias must be used. The volumes element in the <xref
+ linkend="UserEXT" xrefstyle="template: Examples %n"/> and
+ <xref linkend="UserEXTJ" xrefstyle="select: labelnumber"/>
+ is defined in the <code>RS-META</code> namespace. Extended
+ headers are always prefixed with <code>X-</code> followed
+ by the alias and a dash: (<code>X-RS-META-HEADER1</code>).
+ Parameters must be prefixed with the extension alias
+ followed by a colon.
+ </para>
+ <important>
+ <para>
+ Applications should be prepared to ignore response
+ data that contains extension elements. Also,
+ applications should also verify that an extension is
+ available before submitting an extended request.
+ </para>
+ </important>
+ <example xml:id="UserEXT">
+ <title>Extended User Response: XML</title>
+ <programlisting language="xml">
+<xi:include href="samples/ext-getuser.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example xml:id="UserEXTJ">
+ <title>Extended User Response: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="samples/ext-getuser.json" parse="text"/></programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Faults</title>
+ <para>When an error occurs the system will return an HTTP error response code denoting the
+ type of error. The system will also return additional information about the fault in the
+ body of the response. </para>
+ <example>
+ <title>XML Fault Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/idm_fault.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Fault Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/idm_fault.json" parse="text"/>
+</programlisting>
+ </example>
+ <para>The error code is returned in the body of the response for convenience. The message
+ section returns a human readable message. The details section is optional and may contain
+ useful information for tracking down an error (e.g a stack trace). </para>
+ <para>The root element of the fault (e.g. idmFault) may change depending on the type of error.
+ The following is an example of an itemNotFound error. </para>
+ <example>
+ <title>XML Not Found Fault</title>
+ <programlisting language="xml">
+<xi:include href="samples/item_not_found.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Not Found Fault</title>
+ <programlisting language="javascript">
+<xi:include href="samples/item_not_found.json" parse="text"/>
+</programlisting>
+ </example>
+ <para> The following is a list of possible fault types along with their associated error
+ codes. </para>
+ <table rules="all">
+ <caption>Fault Types</caption>
+ <thead>
+ <tr>
+ <td>Fault Element</td>
+ <td>Associated Error Code</td>
+ <td>Expected in All Requests</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr align="center">
+ <td>idmFault</td>
+ <td>500, 400</td>
+ <td> &CHECK; </td>
+ </tr>
+ <tr align="center">
+ <td>serviceUnavailable</td>
+ <td>503</td>
+ <td> &CHECK; </td>
+ </tr>
+ <tr align="center">
+ <td>badRequest</td>
+ <td>400</td>
+ <td> &CHECK; </td>
+ </tr>
+ <tr align="center">
+ <td>unauthorized</td>
+ <td>401</td>
+ <td> &CHECK; </td>
+ </tr>
+ <tr align="center">
+ <td>overLimit</td>
+ <td>413</td>
+ <td/>
+ </tr>
+ <tr align="center">
+ <td>userDisabled</td>
+ <td>403</td>
+ <td/>
+ </tr>
+ <tr align="center">
+ <td>forbidden</td>
+ <td>403</td>
+ <td/>
+ </tr>
+ <tr align="center">
+ <td>itemNotFound</td>
+ <td>404</td>
+ <td/>
+ </tr>
+ <tr align="center">
+ <td>tenantConflict</td>
+ <td>409</td>
+ <td/>
+ </tr>
+ <tr align="center">
+ <td>usernameConflict</td>
+ <td>409</td>
+ <td/>
+ </tr>
+ <tr align="center">
+ <td>groupConflict</td>
+ <td>409</td>
+ <td/>
+ </tr>
+ </tbody>
+ </table>
+ <para>From an XML schema perspective, all API faults are extensions of the base fault type
+ <type>idmFault</type>. When working with a system that binds XML to actual classes (such
+ as JAXB), one should be capable of using <type>idmFault</type> as a “catch-all” if
+ there&apos;s no interest in distinguishing between individual fault types. </para>
+ </section>
+ </chapter>
+ <chapter>
+ <title>Service Developer Operations</title>
+ <section>
+ <title>Overview</title>
+ <para>The operations described in this chapter allow service developers to get and validate
+ access tokens, manage users, and manage tenants. </para>
+ </section>
+ <section>
+ <title>Token Operations</title>
+ <section>
+ <title>Authenticate</title>
+ <informaltable rules="all">
+ &URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &POST; </td>
+ <td colspan="1">/token</td>
+ <td colspan="4">Authenticate to generate a token and a service catalog.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), userDisabled
+ (<errorcode>403</errorcode>), badRequest (<errorcode>400</errorcode>), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <para>
+ TenantID is optional and may be used to specify that a
+ token should be returned that has access for resources
+ that particular tenant.
+ </para>
+ <example>
+ <title>XML Auth Request</title>
+ <programlisting language="xml">
+ <xi:include href="samples/auth_credentials.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Auth Request</title>
+ <programlisting language="javascript">
+<xi:include href="samples/auth_credentials.json" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML Auth Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/auth.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Auth Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/auth.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Validate Token</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4"
+ >/token/<parameter>tokenId</parameter>?belongsTo=<parameter>tenantId</parameter></td>
+ <td colspan="3">Check that a token is valid and that it belongs to a particular user
+ and return the permissions relevant to a particular client.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), userDisabled(<returnvalue>403</returnvalue>),
+ badRequest (<errorcode>400</errorcode>), itemNotFound (<errorcode>404</errorcode>),
+ idmFault(<returnvalue>500</returnvalue>),
+ serviceUnavailable(<returnvalue>503</returnvalue>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Validate Token Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/validatetoken.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Validate Token Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/validatetoken.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Revoke Token</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &DELETE; </td>
+ <td colspan="4">/token/<parameter>tokenId</parameter></td>
+ <td colspan="3"> Revoke an existing token.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>204</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), userDisabled(<returnvalue>403</returnvalue>),
+ badRequest (<errorcode>400</errorcode>), itemNotFound (<errorcode>404</errorcode>),
+ idmFault(<returnvalue>500</returnvalue>),
+ serviceUnavailable(<returnvalue>503</returnvalue>)</simpara>
+ &NO_REQUEST;
+ </section>
+ </section>
+ <section>
+ <title>Tenant Operations </title>
+ <section>
+ <title>Create a Tenant</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &POST; </td>
+ <td colspan="4">/tenants</td>
+ <td colspan="3">Create a tenant</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>201</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>),
+ forbidden(<errorcode>403</errorcode>),
+ badRequest (<errorcode>400</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML Tenant Create Request</title>
+ <programlisting language="xml">
+<xi:include href="samples/customer.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Create Request</title>
+ <programlisting language="javascript">
+<xi:include href="samples/customer.json" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML Tenant Create Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/customer.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Create Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/customer.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get Tenants</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4">/tenants</td>
+ <td colspan="3">Get a list of tenants.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>),
+ forbidden(<errorcode>403</errorcode>), overLimit(<errorcode>413</errorcode>),
+ badRequest (<errorcode>400</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <para>
+ The operation returns a list of tenants. The list may be
+ filtered to return only those tenants which the caller has
+ access to.
+ </para>
+ &NO_REQUEST;
+ <example>
+ <title>XML Tenants Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/customers.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Tenants Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/customers.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get a Tenant</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4">/tenants/<parameter>tenantId</parameter></td>
+ <td colspan="3">Get a tenant.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>),
+ forbidden(<errorcode>403</errorcode>), itemNotFound(<errorcode>404</errorcode>),
+ badRequest (<errorcode>400</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Tenant Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/customer.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/customer.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Update a Tenant</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &PUT; </td>
+ <td colspan="4">/tenants/<parameter>tenantId</parameter></td>
+ <td colspan="3">Update a tenant..</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>),
+ forbidden(<errorcode>403</errorcode>), itemNotFound(<errorcode>404</errorcode>),
+ badRequest (<errorcode>400</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML Tenant Update Request</title>
+ <programlisting language="xml">
+<xi:include href="samples/customerlock.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Update Request</title>
+ <programlisting language="javascript">
+<xi:include href="samples/customerlock.json" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML Tenant Update Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/updatedcustomer.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Update Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/updatedcustomer.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Delete a Tenant</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &DELETE; </td>
+ <td colspan="4">/tenants/<parameter>tenantId</parameter></td>
+ <td colspan="3">Delete a Tenant.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>204</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ </section>
+ <section>
+ <title>User Operations</title>
+ <section>
+ <title>Create a User</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &POST; </td>
+ <td colspan="4">/tenants/<parameter>tenantId</parameter>/users</td>
+ <td colspan="3">Create a new user. If a blank password is passed in, the API generates
+ a random password for the user.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>The Id attribute and Password element are required in this request. If a
+ blank password is passed in the Password element, the API will generate a random password
+ for the user.</simpara>
+ <simpara>&CODES;<returnvalue>201</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), passwordValidation(<errorcode>400</errorcode>), forbidden
+ (<errorcode>403</errorcode>), itemNotFound (<errorcode>404</errorcode>),
+ usernameConflict(<errorcode>409</errorcode>), emailConflict(<errorcode>409</errorcode>),
+ idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML User Request</title>
+ <programlisting language="xml">
+<xi:include href="samples/adduser.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Request</title>
+ <programlisting language="javascript">
+<xi:include href="samples/adduser.json" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML User Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/adduserresponse.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/addeduser.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get a User</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4"
+ >/tenants/<parameter>tenantId</parameter>/users/<parameter>userId</parameter></td>
+ <td colspan="3">Get a user. </td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML User Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/getuser.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/getuser.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Update a User</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &PUT; </td>
+ <td colspan="4"
+ >/tenants/<parameter>tenantId</parameter>/users/<parameter>userId</parameter></td>
+ <td colspan="3">Update a user. </td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden(<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), emailConflict (409), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML User Request</title>
+ <programlisting language="xml">
+<xi:include href="samples/updateuser.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Request</title>
+ <programlisting language="javascript">
+<xi:include href="samples/updateuser.json" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML User Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/updateduser.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/updateduser.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Delete User</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&DELETE; </td>
+ <td colspan="4"
+ >/tenants/<parameter>tenantId</parameter>/users/<parameter>userId</parameter></td>
+ <td colspan="3">Delete a user. </td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>204</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden(<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ <section>
+ <title>Get Users</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4"
+ >/tenants/<parameter>tenantId</parameter>/users</td>
+ <td colspan="3"> Gets a list of users.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized
+ (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden
+ (<errorcode>403</errorcode>), overLimit
+ (<errorcode>413</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable
+ (<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML User List Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/users.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User List Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/users.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Set a User's Password</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&PUT;</td>
+ <td colspan="4"
+ >/tenants/<parameter>tenantId</parameter>/users/<parameter>userId</parameter>/password</td>
+ <td colspan="3">Set a user's password. </td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden(<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML Set User Password Reqeust</title>
+ <programlisting language="xml">
+<xi:include href="samples/user_api_key.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Set User Password Request</title>
+ <programlisting language="javascript">
+<xi:include href="samples/user_api_key.json" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML Set User Password Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/user_api_key.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Set User Password Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/user_api_key.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Enable / Disable a User</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &PUT; </td>
+ <td colspan="4"
+ >/tenants/<parameter>tenantId</parameter>/users/<parameter>userId</parameter>/enabled</td>
+ <td colspan="3"> Set a user's lock</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden(<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML User Enable Request</title>
+ <programlisting language="xml">
+<xi:include href="samples/userWithOnlyLock.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Enable Request</title>
+ <programlisting language="javascript">
+<xi:include href="samples/userWithOnlyLock.json" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML User Enable Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/userWithOnlyLock.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Enable Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/userWithOnlyLock.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get Groups for a User</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4">/tenants/<parameter>tenantId</parameter>/users/<parameter>userId</parameter>/groups</td>
+ <td colspan="3">Get groups for a user.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML User Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/userGroups.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/userGroups.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ </section>
+ <section>
+ <title>Tenant Groups</title>
+ <section>
+ <title>Create Tenant Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&POST;</td>
+ <td colspan="4"
+ >/tenant/<parameter>tenantId</parameter>/groups</td>
+ <td colspan="3">Creates a tenant group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>201</returnvalue></simpara>
+ <simpara>
+ &ERROR_CODES;
+ unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), userDisabled(<returnvalue>403</returnvalue>),
+ badRequest (<errorcode>400</errorcode>), groupConflict(<returnvalue>409</returnvalue>),
+ idmFault(<returnvalue>500</returnvalue>),
+ serviceUnavailable(<returnvalue>503</returnvalue>)
+ </simpara>
+ <example>
+ <title>XML Tenant Group Create Request</title>
+ <programlisting language="xml">
+<xi:include href="samples/group-create.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Group Create Request</title>
+ <programlisting language="javascript">
+<xi:include href="samples/group-create.json" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>XML Tenant Group Create Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/group.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Group Create Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/group.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get Tenant Groups</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&GET;</td>
+ <td colspan="4"
+ >/tenant/<parameter>tenantId</parameter>/groups</td>
+ <td colspan="3">Get a list of tenant groups.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>
+ &ERROR_CODES;
+ unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), overLimit
+ (<returnvalue>413</returnvalue>), userDisabled
+ (<returnvalue>403</returnvalue>), badRequest
+ (<errorcode>400</errorcode>), idmFault
+ (<returnvalue>500</returnvalue>), serviceUnavailable
+ (<returnvalue>503</returnvalue>)
+ </simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Tenant Groups Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/groups.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Groups Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/groups.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get a Tenant Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&GET;</td>
+ <td colspan="4"
+ >/tenant/<parameter>tenantId</parameter>/groups/<parameter>groupId</parameter></td>
+ <td colspan="3">Get a tenant group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>
+ &ERROR_CODES;
+ unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), userDisabled(<returnvalue>403</returnvalue>),
+ badRequest (<errorcode>400</errorcode>), itemNotFound(<errorcode>404</errorcode>),
+ idmFault(<returnvalue>500</returnvalue>),
+ serviceUnavailable(<returnvalue>503</returnvalue>)
+ </simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Tenant Group Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/group.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Groups Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/group.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Update a Tenant Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&PUT;</td>
+ <td colspan="4">/tenant/<parameter>tenantId</parameter>/groups/<parameter>groupId</parameter></td>
+ <td colspan="3">Update a tenant group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>),
+ forbidden(<errorcode>403</errorcode>), itemNotFound(<errorcode>404</errorcode>),
+ badRequest (<errorcode>400</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML Tenant Group Update Request</title>
+ <programlisting language="xml">
+<xi:include href="samples/group-updated.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Group Update Request</title>
+ <programlisting language="javascript">
+<xi:include href="samples/group-updated.json" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>XML Tenant Group Update Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/group-updated.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Group Update Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/group-updated.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Delete a Tenant Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&DELETE;</td>
+ <td colspan="4">/tenant/<parameter>tenantId</parameter>/groups/<parameter>groupId</parameter></td>
+ <td colspan="3">Delete a tenant group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>204</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ <section>
+ <title>Get Users in Tenant Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4"
+ >/tenants/<parameter>tenantId</parameter>/groups/<parameter>groupId</parameter>/users</td>
+ <td colspan="3"> Gets a list of users in a tenant group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized
+ (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden
+ (<errorcode>403</errorcode>), overLimit
+ (<errorcode>413</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable
+ (<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Tenant Group User List Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/users.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Group User List Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/users.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Add a User to a Tenant Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&PUT;</td>
+ <td colspan="4">/tenants/<parameter>tenantId</parameter>/groups/<parameter>groupId</parameter>/users</td>
+ <td colspan="3">Add a user to a tenant group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized
+ (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden
+ (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), usernameConflict
+ (<errorcode>409</errorcode>), emailConflict
+ (<errorcode>409</errorcode>), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable
+ (<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ <section>
+ <title>Remove a User from a Tenant Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&DELETE;</td>
+ <td colspan="4">/tenants/<parameter>tenantId</parameter>/groups/<parameter>groupId</parameter>/users</td>
+ <td colspan="3">Remove a user from a tenant group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>204</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized
+ (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden
+ (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), usernameConflict
+ (<errorcode>409</errorcode>), emailConflict
+ (<errorcode>409</errorcode>), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable
+ (<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ </section>
+ <section>
+ <title>Global Groups</title>
+ <section>
+ <title>Create a Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&POST;</td>
+ <td colspan="4">/groups</td>
+ <td colspan="3">Creates a group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>201</returnvalue></simpara>
+ <simpara>
+ &ERROR_CODES;
+ unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), userDisabled(<returnvalue>403</returnvalue>),
+ badRequest (<errorcode>400</errorcode>), groupConflict(<returnvalue>409</returnvalue>),
+ idmFault(<returnvalue>500</returnvalue>),
+ serviceUnavailable(<returnvalue>503</returnvalue>)
+ </simpara>
+ <example>
+ <title>XML Group Create Request</title>
+ <programlisting language="xml">
+<xi:include href="samples/group-create.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Group Create Request</title>
+ <programlisting language="javascript">
+<xi:include href="samples/group-create.json" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>XML Group Create Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/group-create.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Group Create Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/group-create.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get Groups</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&GET;</td>
+ <td colspan="4">/groups</td>
+ <td colspan="3">Get a list of groups.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>
+ &ERROR_CODES;
+ unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), overLimit
+ (<returnvalue>413</returnvalue>), userDisabled
+ (<returnvalue>403</returnvalue>), badRequest
+ (<errorcode>400</errorcode>), idmFault
+ (<returnvalue>500</returnvalue>), serviceUnavailable
+ (<returnvalue>503</returnvalue>)
+ </simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Groups Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/groups-nt.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Groups Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/groups-nt.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get a Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&GET;</td>
+ <td colspan="4">/groups/<parameter>groupId</parameter></td>
+ <td colspan="3">Get a group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>
+ &ERROR_CODES;
+ unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), userDisabled(<returnvalue>403</returnvalue>),
+ badRequest (<errorcode>400</errorcode>), itemNotFound(<errorcode>404</errorcode>),
+ idmFault(<returnvalue>500</returnvalue>),
+ serviceUnavailable(<returnvalue>503</returnvalue>)
+ </simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Group Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/group-create.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Groups Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/group-create.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Update a Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&PUT;</td>
+ <td colspan="4">/groups/<parameter>groupId</parameter></td>
+ <td colspan="3">Update a group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>),
+ forbidden(<errorcode>403</errorcode>), itemNotFound(<errorcode>404</errorcode>),
+ badRequest (<errorcode>400</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML Group Update Request</title>
+ <programlisting language="xml">
+<xi:include href="samples/group-updated-nt.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Group Update Request</title>
+ <programlisting language="javascript">
+<xi:include href="samples/group-updated-nt.json" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>XML Group Update Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/group-updated-nt.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Group Update Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/group-updated-nt.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Delete a Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&DELETE;</td>
+ <td colspan="4">/groups/<parameter>groupId</parameter></td>
+ <td colspan="3">Delete a group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>204</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ <section>
+ <title>Get Users in a Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4">/groups/<parameter>groupId</parameter>/users</td>
+ <td colspan="3"> Gets a list of users in a group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden(<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Group User List Response</title>
+ <programlisting language="xml">
+<xi:include href="samples/users.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Group User List Response</title>
+ <programlisting language="javascript">
+<xi:include href="samples/users.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Add a User to a Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&PUT;</td>
+ <td colspan="4">/groups/<parameter>groupId</parameter>/users</td>
+ <td colspan="3">Add a user to a group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized
+ (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden
+ (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), usernameConflict
+ (<errorcode>409</errorcode>), emailConflict
+ (<errorcode>409</errorcode>), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable
+ (<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ <section>
+ <title>Remove a User from a Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&DELETE;</td>
+ <td colspan="4">/groups/<parameter>groupId</parameter>/users</td>
+ <td colspan="3">Remove a user from a group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>204</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized
+ (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden
+ (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), usernameConflict
+ (<errorcode>409</errorcode>), emailConflict
+ (<errorcode>409</errorcode>), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable
+ (<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ </section>
+ </chapter>
+</book>
diff --git a/docs/guide/src/docbkx/idmdevguide.xml~ b/docs/guide/src/docbkx/idmdevguide.xml~
new file mode 100644
index 00000000..6828a564
--- /dev/null
+++ b/docs/guide/src/docbkx/idmdevguide.xml~
@@ -0,0 +1,1853 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE book [<!-- Some useful entities borrowed from HTML -->
+ <!ENTITY ndash "–">
+ <!ENTITY mdash "—">
+ <!ENTITY hellip "…">
+
+ <!-- Useful for describing APIs -->
+ <!ENTITY GET '<command xmlns="http://docbook.org/ns/docbook">GET</command>'>
+ <!ENTITY PUT '<command xmlns="http://docbook.org/ns/docbook">PUT</command>'>
+ <!ENTITY POST '<command xmlns="http://docbook.org/ns/docbook">POST</command>'>
+ <!ENTITY DELETE '<command xmlns="http://docbook.org/ns/docbook">DELETE</command>'>
+
+
+ <!ENTITY CHECK '<inlinemediaobject xmlns="http://docbook.org/ns/docbook">
+ <imageobject>
+ <imagedata fileref="../../img/Check_mark_23x20_02.svg"
+ format="SVG" scale="60"/>
+ </imageobject>
+ </inlinemediaobject>'>
+ <!ENTITY CODES 'Normal Response Code(s):'>
+ <!ENTITY ERROR_CODES 'Error Response Code(s):'>
+ <!ENTITY NO_REQUEST '<para xmlns="http://docbook.org/ns/docbook">
+ This operation does not require a request body.</para>'>
+ <!ENTITY LONG_URI_REFHEAD '
+ <thead xmlns="http://docbook.org/ns/docbook">
+ <tr>
+ <td colspan="1">Verb</td>
+ <td colspan="4">URI</td>
+ <td colspan="3">Description</td>
+ </tr>
+ </thead>'>
+ <!ENTITY URI_REFHEAD '
+ <thead xmlns="http://docbook.org/ns/docbook">
+ <tr>
+ <td colspan="1">Verb</td>
+ <td colspan="1">URI</td>
+ <td colspan="4">Description</td>
+ </tr>
+ </thead>'>
+]>
+<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:html="http://www.w3.org/1999/xhtml"
+ xmlns:db="http://docbook.org/ns/docbook" version="5.0" status="draft">
+ <title>Cloud Identity Developer Guide</title>
+ <info>
+ <author>
+ <personname>
+ <firstname/>
+ <surname/>
+ </personname>
+ <affiliation>
+ <orgname>Rackspace Cloud</orgname>
+ </affiliation>
+ </author>
+ <copyright>
+ <year>2010</year>
+ <year>2011</year>
+ <holder>Rackspace Hosting, Inc.</holder>
+ </copyright>
+ <releaseinfo>API v1.0</releaseinfo>
+ <productname>Cloud Identity</productname>
+ <pubdate>2011-04-11</pubdate>
+ <legalnotice role="apache2">
+ <annotation>
+ <remark>Copyright details are filled in by the template.</remark>
+ </annotation>
+ </legalnotice>
+ <abstract>
+ <para> This document is intended for software developers interested in developing applications
+ which utilizes Organization Identity Management System as the authentication engine. It includes
+ details on how to integrate with IdM. </para>
+ </abstract>
+ </info>
+ <chapter>
+ <title>Overview</title>
+ <para>The IdM Service allows Rackspace Applications to obtain tokens that can be used to access
+ resources in the Rackspace Cloud. This document is intended for: </para>
+ <variablelist>
+ <varlistentry>
+ <term>Service Developers</term>
+ <listitem>
+ <para> Service developers are interested in writing client for Rackspace IdM service.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <para> This Guide assumes the reader is familiar with RESTful web services, HTTP/1.1, and JSON
+ and/or XML serialization formats. </para>
+ </chapter>
+ <chapter>
+ <title>Concepts</title>
+ <para> The IdM system has several key concepts that are important to understand: </para>
+ <section>
+ <title>Token</title>
+ <para>
+ A token is an arbitrary bit of text that is used to access
+ resources. Each token has a scope which describes which
+ resources are accessible with it. A token may be
+ revoked at anytime and is valid for a finite duration.
+ </para>
+ </section>
+ <section>
+ <title>Tenant</title>
+ <para>
+ Depending on the operator, a tenant may map to a customer,
+ account, organization, or project. Users are always placed
+ under a tenant.
+ </para>
+ </section>
+ <section>
+ <title>User</title>
+ <para>
+ Individuals under a tenant. Users have a login and may be
+ assigned tokens to access resources.
+ </para>
+ </section>
+ <section>
+ <title>Tenant Group</title>
+ <para>
+ A group of users under a tenant. Tenant groups are managed
+ by tenants. They are used to organize and assign
+ privileges to group of related users. For example a tenant
+ may add administrator privileges to users in the "admin" group.
+ </para>
+ </section>
+ <section>
+ <title>Global Group</title>
+ <para>
+ A global group of users. Global groups are managed by
+ operators. They are used to organize and assign privileges
+ to a group of related users. For example, an operator may
+ create a "delinquent" group, which will assign limited
+ privileges to users who have past due bills.
+ </para>
+ </section>
+ </chapter>
+ <chapter>
+ <title>General API Information</title>
+ <para>The IdM API is implemented using a RESTful web service interface. All requests to
+ authenticate and operate against the IdM API are performed using SSL over HTTP (HTTPS) on TCP
+ port 443.</para>
+ <section>
+ <title>Request/Response Types</title>
+ <para> The IdM API supports both the JSON and XML data serialization formats. The request
+ format is specified using the <code>Content-Type</code> header and is required for
+ operations that have a request body. The response format can be specified in requests using
+ either the <code>Accept</code> header or adding an <code>.xml</code> or <code>.json</code>
+ extension to the request URI. Note that it is possible for a response to be serialized using
+ a format different from the request (see example below). If no response format is specified,
+ JSON is the default. If conflicting formats are specified using both an <code>Accept</code>
+ header and a query extension, the query extension takes precedence.</para>
+ <table rules="all">
+ <caption>Response Types</caption>
+ <thead>
+ <tr>
+ <td>Format</td>
+ <td>Accept Header</td>
+ <td>Query Extension</td>
+ <td>Default</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>JSON</td>
+ <td>application/json</td>
+ <td>.json</td>
+ <td>Yes</td>
+ </tr>
+ <tr>
+ <td>XML</td>
+ <td>application/xml</td>
+ <td>.xml</td>
+ <td>No</td>
+ </tr>
+ </tbody>
+ </table>
+ <example>
+ <title>JSON Request with Headers</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/samplerequestheader.json" parse="text"/>
+</programlisting>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/auth_credentials.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML Response with Headers</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/sampleresponseheader.json" parse="text"/>
+</programlisting>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/auth.xml" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Content Compression</title>
+ <para>Request and response body data my be encoded with gzip compression in order to
+ accelerate interactive performance of API calls and responses. This is controlled using the
+ <code>Accept-Encoding</code> header on the request from the client and indicated by the
+ <code>Content-Encoding</code> header in the server response. Unless the header is
+ explicitly set, encoding defaults to disabled.</para>
+ <table rules="all">
+ <caption>Compression Headers</caption>
+ <thead>
+ <tr>
+ <td>Header Type</td>
+ <td>Name</td>
+ <td>Value</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>HTTP/1.1 Request</td>
+ <td>Accept-Encoding</td>
+ <td>gzip</td>
+ </tr>
+ <tr>
+ <td>HTTP/1.1 Response</td>
+ <td>Content-Encoding</td>
+ <td>gzip</td>
+ </tr>
+ </tbody>
+ </table>
+ </section>
+ <section>
+ <title>Paginated Collections</title>
+ <para>
+ To reduce load on the service, list operations will
+ return a maximum number of items at a time. The
+ maximum number of items returned is determined by the
+ IDM provider. To navigate the collection, the
+ parameters <parameter>limit</parameter> and
+ <parameter>marker</parameter> can be set in the URI
+ (e.g.?<parameter>limit</parameter>=100&amp;<parameter>marker</parameter>=1234).
+ The <parameter>marker</parameter> parameter is the ID
+ of the last item in the previous list. Items are
+ sorted by update time. When an update time is not
+ available they are sorted by ID. The
+ <parameter>limit</parameter> parameter sets the page
+ size. Both parameters are optional. If the client
+ requests a <parameter>limit</parameter> beyond that
+ which is supported by the deployment an overLimit
+ (<errorcode>413</errorcode>) fault may be thrown. A
+ marker with an invalid ID will return an itemNotFound
+ (<errorcode>404</errorcode>) fault.
+ </para>
+ <note>
+ <para>
+ Paginated collections never return itemNotFound
+ (<errorcode>404</errorcode>) faults when the
+ collection is empty &mdash; clients should expect
+ an empty collection.
+ </para>
+ </note>
+ <para>
+ For convenience, collections contain atom "next" and
+ "previous" links. The first page in the list will not
+ contain a "previous" link, the last page in the list
+ will not contain a "next" link. The following examples
+ illustrate three pages in a collection of tenants. The
+ first page was retrieved via a &GET; to
+ http://idm.api.openstack.org/v1.0/1234/tenants?limit=1.
+ In these examples, the <parameter>limit</parameter>
+ parameter sets the page size to a single item.
+ Subsequent "next" and "previous" links will honor the
+ initial page size. Thus, a client may follow links to
+ traverse a paginated collection without having to
+ input the <parameter>marker</parameter> parameter.
+ </para>
+ <example>
+ <title>Tenant Collection, First Page: XML</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/tenants-1.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Tenant Collection, First Page: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="../../formattedsamples/tenants-1.json" parse="text"/></programlisting>
+ </example>
+ <example>
+ <title>Tenant Collection, Second Page: XML</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/tenants-2.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Tenant Collection, Second Page: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="../../formattedsamples/tenants-2.json" parse="text"/></programlisting>
+ </example>
+ <example>
+ <title>Tenant Collection, Last Page: XML</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/tenants-3.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Tenant Collection, Last Page: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="../../formattedsamples/tenants-3.json" parse="text"/></programlisting>
+ </example>
+ <para>
+ In the JSON representation, paginated collections contain
+ a <property>values</property> property that contains the
+ items in the collections. Links are accessed via the
+ <property>links</property> property. The approach allows
+ for extensibility of both the collection members and of
+ the paginated collection itself. It also allows
+ collections to be embedded in other objects as illustrated
+ below. Here, a subset of grups are presented within a
+ user. Clients must follow the "next" link to continue to
+ retrive additonal groups belonging to a user.
+ </para>
+ <example>
+ <title>Paginated Groups in a User: XML</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/getuser-1.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Paginated Groups in an User: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="../../formattedsamples/getuser-1.json" parse="text"/></programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Versions</title>
+ <para>
+ The OpenStack IDM API uses both a URI and a MIME
+ type versioning scheme. In the URI scheme, the first
+ element of the path contains the target version
+ identifier (e.g. https://idm.api.openstack.org/
+ v1.0/&hellip;). The MIME type versioning scheme uses
+ HTTP content negotiation where the <code>Accept</code>
+ or <code>Content-Type</code> headers contains a MIME
+ type that identifies the version
+ (application/vnd.openstack.idm-v1.1+xml). A
+ version MIME type is always linked to a base MIME type
+ (application/xml or application/json). If conflicting
+ versions are specified using both an HTTP header and a
+ URI, the URI takes precedence.
+ </para>
+ <example>
+ <title>Request with MIME type versioning</title>
+ <literallayout class="monospaced">
+GET /tenants HTTP/1.1
+Host: idm.api.openstack.org
+Accept: application/vnd.openstack.idm-v1.1+xml
+X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb
+ </literallayout>
+ </example>
+ <example>
+ <title>Request with URI versioning</title>
+ <literallayout class="monospaced">
+GET /v1.1/tenants HTTP/1.1
+Host: idm.api.openstack.org
+Accept: application/xml
+X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb
+ </literallayout>
+ </example>
+ <note>
+ <para>
+ The MIME type versioning approach allows for the
+ creating of permanent links, because the version
+ scheme is not specified in the URI path:
+ https://api.idm.openstack.org/tenants/12234.
+ </para>
+ </note>
+ <para>
+ If a request is made without a version specified in
+ the URI or via HTTP headers, then a multiple-choices
+ response (<returnvalue>300</returnvalue>) will follow
+ providing links and MIME types to available versions.
+ </para>
+ <example>
+ <title>Multiple Choices Response: XML</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/choices.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Multiple Choices Response: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="../../formattedsamples/choices.json" parse="text"/></programlisting>
+ </example>
+ <para>
+ New features and functionality that do not break
+ API-compatibility will be introduced in the current
+ version of the API as extensions (see below) and the
+ URI and MIME types will remain unchanged. Features or
+ functionality changes that would necessitate a break
+ in API-compatibility will require a new version, which
+ will result in URI and MIME type version being updated
+ accordingly. When new API versions are released, older
+ versions will be marked as
+ <code>DEPRECATED</code>. Providers should work with
+ developers and partners to ensure there is adequate
+ time to migrate to the new version before deprecated
+ versions are discontinued.
+ </para>
+ <para>
+ Your application can programmatically determine
+ available API versions by performing a &GET; on the
+ root URL (i.e. with the version and everything to the
+ right of it truncated) returned from the
+ authentication system. Note that an Atom
+ representation of the versions resources is supported
+ when issuing a request with the <code>Accept</code>
+ header containing application/atom+xml or by adding a
+ .atom to the request URI. This allows standard Atom
+ clients to track version changes.
+ </para>
+ <example>
+ <title>Versions List Request</title>
+ <literallayout class="monospaced">
+GET HTTP/1.1
+Host: idm.api.openstack.org
+ </literallayout>
+ </example>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; badRequest
+ (<errorcode>400</errorcode>), idmFault
+ (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>Versions List Response: XML</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/versions.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Versions List Response: Atom</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/versions-atom.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Versions List Response: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="../../formattedsamples/versions.json" parse="text"/></programlisting>
+ </example>
+ <para>
+ You can also obtain additional information about a
+ specific version by performing a &GET; on the base
+ version URL
+ (e.g. https://idm.api.openstack.org/v1.1/).
+ Version request URLs should always end with a trailing
+ slash (/). If the slash is omitted, the server may
+ respond with a <returnvalue>302</returnvalue>
+ redirection request. Format extensions may be placed
+ after the slash
+ (e.g. https://idm.api.openstack.org/v1.1/.xml). Note
+ that this is a special case that does not hold true
+ for other API requests. In general, requests such as
+ /tenants.xml and /tenants/.xml are handled
+ equivalently.
+ </para>
+ <example>
+ <title>Version Details Request</title>
+ <literallayout class="monospaced">
+GET HTTP/1.1
+Host: idm.api.openstack.org/v1.1/
+ </literallayout>
+ </example>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; badRequest
+ (<errorcode>400</errorcode>), idmFault
+ (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>Version Details Response: XML</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/version.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Version Details Response: Atom</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/version-atom.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Version Details Response: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="../../formattedsamples/version.json" parse="text"/></programlisting>
+ </example>
+ <para>
+ The detailed version response contains pointers to
+ both a human-readable and a machine-processable
+ description of the API service. The machine-processable description is written in the Web
+ Application Description Language (WADL).
+ </para>
+ <note>
+ <para>If there is a discrepancy between the two specifications, the WADL is
+ authoritative as it contains the most accurate and up-to-date description of the
+ API service. </para>
+ </note>
+ </section>
+ <section>
+ <title>Extensions</title>
+ <para>
+ The OpenStack IDM API is extensible. Extensions
+ serve two purposes: They allow the introduction of new
+ features in the API without requiring a version change
+ and they allow the introduction of vendor specific
+ niche functionality. Applications can programmatically
+ determine what extensions are available by performing
+ a &GET; on the /extensions URI. Note that this is a
+ versioned request &mdash; that is, an extension
+ available in one API version may not be available in
+ another.
+ </para>
+ <informaltable rules="all">
+ <thead>
+ <tr>
+ <td colspan="1">Verb</td>
+ <td colspan="2">URI</td>
+ <td colspan="3">Description</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td colspan="1">&GET;</td>
+ <td colspan="2">/extensions</td>
+ <td colspan="3">Returns a list of available extensions</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <para>
+ Each extension is identified by two unique identifiers, a
+ <property>namespace</property> and an
+ <property>alias</property>. Additionally an extension
+ contains documentation links in various formats.
+ </para>
+ <example>
+ <title>Extensions Response: XML</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/extensions.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Extensions Response: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="../../formattedsamples/extensions.json" parse="text"/></programlisting>
+ </example>
+ <para>
+ Extensions may also be queried individually by their
+ unique alias. This provides the simplest method of
+ checking if an extension is available as an unavailable
+ extension will issue an itemNotFound
+ (<errorcode>404</errorcode>) response.
+ </para>
+ <informaltable rules="all">
+ <thead>
+ <tr>
+ <td colspan="1">Verb</td>
+ <td colspan="2">URI</td>
+ <td colspan="3">Description</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td colspan="1">&GET;</td>
+ <td colspan="2">/extensions/<parameter>alias</parameter></td>
+ <td colspan="3">Return details of a single extension</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>Extension Response: xml</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/extension.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>Extensions Response: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="../../formattedsamples/extension.json" parse="text"/></programlisting>
+ </example>
+ <para>
+ Extensions may define new data types, parameters, actions,
+ headers, states, and resources. In XML, additional
+ elements and attributes may be defined. These elements
+ must be defined in the extension's namespace. In JSON, the
+ alias must be used. The volumes element in the <xref
+ linkend="UserEXT" xrefstyle="template: Examples %n"/> and
+ <xref linkend="UserEXTJ" xrefstyle="select: labelnumber"/>
+ is defined in the <code>RS-META</code> namespace. Extended
+ headers are always prefixed with <code>X-</code> followed
+ by the alias and a dash: (<code>X-RS-META-HEADER1</code>).
+ Parameters must be prefixed with the extension alias
+ followed by a colon.
+ </para>
+ <important>
+ <para>
+ Applications should be prepared to ignore response
+ data that contains extension elements. Also,
+ applications should also verify that an extension is
+ available before submitting an extended request.
+ </para>
+ </important>
+ <example xml:id="UserEXT">
+ <title>Extended User Response: XML</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/ext-getuser.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example xml:id="UserEXTJ">
+ <title>Extended User Response: JSON</title>
+ <programlisting language="javascript"><xi:include
+ href="../../formattedsamples/ext-getuser.json" parse="text"/></programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Faults</title>
+ <para>When an error occurs the system will return an HTTP error response code denoting the
+ type of error. The system will also return additional information about the fault in the
+ body of the response. </para>
+ <example>
+ <title>XML Fault Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/idm_fault.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Fault Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/idm_fault.json" parse="text"/>
+</programlisting>
+ </example>
+ <para>The error code is returned in the body of the response for convenience. The message
+ section returns a human readable message. The details section is optional and may contain
+ useful information for tracking down an error (e.g a stack trace). </para>
+ <para>The root element of the fault (e.g. idmFault) may change depending on the type of error.
+ The following is an example of an itemNotFound error. </para>
+ <example>
+ <title>XML Not Found Fault</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/item_not_found.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Not Found Fault</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/item_not_found.json" parse="text"/>
+</programlisting>
+ </example>
+ <para> The following is a list of possible fault types along with their associated error
+ codes. </para>
+ <table rules="all">
+ <caption>Fault Types</caption>
+ <thead>
+ <tr>
+ <td>Fault Element</td>
+ <td>Associated Error Code</td>
+ <td>Expected in All Requests</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr align="center">
+ <td>idmFault</td>
+ <td>500, 400</td>
+ <td> &CHECK; </td>
+ </tr>
+ <tr align="center">
+ <td>serviceUnavailable</td>
+ <td>503</td>
+ <td> &CHECK; </td>
+ </tr>
+ <tr align="center">
+ <td>badRequest</td>
+ <td>400</td>
+ <td> &CHECK; </td>
+ </tr>
+ <tr align="center">
+ <td>unauthorized</td>
+ <td>401</td>
+ <td> &CHECK; </td>
+ </tr>
+ <tr align="center">
+ <td>overLimit</td>
+ <td>413</td>
+ <td/>
+ </tr>
+ <tr align="center">
+ <td>userDisabled</td>
+ <td>403</td>
+ <td/>
+ </tr>
+ <tr align="center">
+ <td>forbidden</td>
+ <td>403</td>
+ <td/>
+ </tr>
+ <tr align="center">
+ <td>itemNotFound</td>
+ <td>404</td>
+ <td/>
+ </tr>
+ <tr align="center">
+ <td>tenantConflict</td>
+ <td>409</td>
+ <td/>
+ </tr>
+ <tr align="center">
+ <td>usernameConflict</td>
+ <td>409</td>
+ <td/>
+ </tr>
+ <tr align="center">
+ <td>groupConflict</td>
+ <td>409</td>
+ <td/>
+ </tr>
+ </tbody>
+ </table>
+ <para>From an XML schema perspective, all API faults are extensions of the base fault type
+ <type>idmFault</type>. When working with a system that binds XML to actual classes (such
+ as JAXB), one should be capable of using <type>idmFault</type> as a “catch-all” if
+ there&apos;s no interest in distinguishing between individual fault types. </para>
+ </section>
+ </chapter>
+ <chapter>
+ <title>Service Developer Operations</title>
+ <section>
+ <title>Overview</title>
+ <para>The operations described in this chapter allow service developers to get and validate
+ access tokens, manage users, and manage tenants. </para>
+ </section>
+ <section>
+ <title>Token Operations</title>
+ <section>
+ <title>Authenticate</title>
+ <informaltable rules="all">
+ &URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &POST; </td>
+ <td colspan="1">/token</td>
+ <td colspan="4">Authenticate to generate a token and a service catalog.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), userDisabled
+ (<errorcode>403</errorcode>), badRequest (<errorcode>400</errorcode>), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <para>
+ TenantID is optional and may be used to specify that a
+ token should be returned that has access for resources
+ that particular tenant.
+ </para>
+ <example>
+ <title>XML Auth Request</title>
+ <programlisting language="xml">
+ <xi:include href="../../formattedsamples/auth_credentials.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Auth Request</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/auth_credentials.json" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML Auth Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/auth.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Auth Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/auth.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Validate Token</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4"
+ >/token/<parameter>tokenId</parameter>?belongsTo=<parameter>tenantId</parameter></td>
+ <td colspan="3">Check that a token is valid and that it belongs to a particular user
+ and return the permissions relevant to a particular client.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), userDisabled(<returnvalue>403</returnvalue>),
+ badRequest (<errorcode>400</errorcode>), itemNotFound (<errorcode>404</errorcode>),
+ idmFault(<returnvalue>500</returnvalue>),
+ serviceUnavailable(<returnvalue>503</returnvalue>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Validate Token Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/validatetoken.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Validate Token Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/validatetoken.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Revoke Token</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &DELETE; </td>
+ <td colspan="4">/token/<parameter>tokenId</parameter></td>
+ <td colspan="3"> Revoke an existing token.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>204</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), userDisabled(<returnvalue>403</returnvalue>),
+ badRequest (<errorcode>400</errorcode>), itemNotFound (<errorcode>404</errorcode>),
+ idmFault(<returnvalue>500</returnvalue>),
+ serviceUnavailable(<returnvalue>503</returnvalue>)</simpara>
+ &NO_REQUEST;
+ </section>
+ </section>
+ <section>
+ <title>Tenant Operations </title>
+ <section>
+ <title>Create a Tenant</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &POST; </td>
+ <td colspan="4">/tenants</td>
+ <td colspan="3">Create a tenant</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>201</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>),
+ forbidden(<errorcode>403</errorcode>),
+ badRequest (<errorcode>400</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML Tenant Create Request</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/customer.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Create Request</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/customer.json" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML Tenant Create Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/customer.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Create Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/customer.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get Tenants</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4">/tenants</td>
+ <td colspan="3">Get a list of tenants.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>),
+ forbidden(<errorcode>403</errorcode>), overLimit(<errorcode>413</errorcode>),
+ badRequest (<errorcode>400</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <para>
+ The operation returns a list of tenants. The list may be
+ filtered to return only those tenants which the caller has
+ access to.
+ </para>
+ &NO_REQUEST;
+ <example>
+ <title>XML Tenants Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/customers.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Tenants Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/customers.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get a Tenant</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4">/tenants/<parameter>tenantId</parameter></td>
+ <td colspan="3">Get a tenant.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>),
+ forbidden(<errorcode>403</errorcode>), itemNotFound(<errorcode>404</errorcode>),
+ badRequest (<errorcode>400</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Tenant Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/customer.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/customer.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Update a Tenant</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &PUT; </td>
+ <td colspan="4">/tenants/<parameter>tenantId</parameter></td>
+ <td colspan="3">Update a tenant..</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>),
+ forbidden(<errorcode>403</errorcode>), itemNotFound(<errorcode>404</errorcode>),
+ badRequest (<errorcode>400</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML Tenant Update Request</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/customerlock.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Update Request</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/customerlock.json" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML Tenant Update Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/updatedcustomer.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Update Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/updatedcustomer.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Delete a Tenant</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &DELETE; </td>
+ <td colspan="4">/tenants/<parameter>tenantId</parameter></td>
+ <td colspan="3">Delete a Tenant.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>204</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ </section>
+ <section>
+ <title>User Operations</title>
+ <section>
+ <title>Create a User</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &POST; </td>
+ <td colspan="4">/tenants/<parameter>tenantId</parameter>/users</td>
+ <td colspan="3">Create a new user. If a blank password is passed in, the API generates
+ a random password for the user.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>The Id attribute and Password element are required in this request. If a
+ blank password is passed in the Password element, the API will generate a random password
+ for the user.</simpara>
+ <simpara>&CODES;<returnvalue>201</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), passwordValidation(<errorcode>400</errorcode>), forbidden
+ (<errorcode>403</errorcode>), itemNotFound (<errorcode>404</errorcode>),
+ usernameConflict(<errorcode>409</errorcode>), emailConflict(<errorcode>409</errorcode>),
+ idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML User Request</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/adduser.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Request</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/adduser.json" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML User Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/adduserresponse.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/addeduser.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get a User</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4"
+ >/tenants/<parameter>tenantId</parameter>/users/<parameter>userId</parameter></td>
+ <td colspan="3">Get a user. </td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML User Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/getuser.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/getuser.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Update a User</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &PUT; </td>
+ <td colspan="4"
+ >/tenants/<parameter>tenantId</parameter>/users/<parameter>userId</parameter></td>
+ <td colspan="3">Update a user. </td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden(<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), emailConflict (409), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML User Request</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/updateuser.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Request</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/updateuser.json" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML User Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/updateduser.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/updateduser.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Delete User</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&DELETE; </td>
+ <td colspan="4"
+ >/tenants/<parameter>tenantId</parameter>/users/<parameter>userId</parameter></td>
+ <td colspan="3">Delete a user. </td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>204</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden(<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ <section>
+ <title>Get Users</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4"
+ >/tenants/<parameter>tenantId</parameter>/users</td>
+ <td colspan="3"> Gets a list of users.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized
+ (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden
+ (<errorcode>403</errorcode>), overLimit
+ (<errorcode>413</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable
+ (<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML User List Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/users.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User List Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/users.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Set a User's Password</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&PUT;</td>
+ <td colspan="4"
+ >/tenants/<parameter>tenantId</parameter>/users/<parameter>userId</parameter>/password</td>
+ <td colspan="3">Set a user's password. </td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden(<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML Set User Password Reqeust</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/user_api_key.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Set User Password Request</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/user_api_key.json" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML Set User Password Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/user_api_key.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Set User Password Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/user_api_key.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Enable / Disable a User</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &PUT; </td>
+ <td colspan="4"
+ >/tenants/<parameter>tenantId</parameter>/users/<parameter>userId</parameter>/enabled</td>
+ <td colspan="3"> Set a user's lock</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden(<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML User Enable Request</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/userWithOnlyLock.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Enable Request</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/userWithOnlyLock.json" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>XML User Enable Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/userWithOnlyLock.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Enable Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/userWithOnlyLock.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get Groups for a User</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4">/tenants/<parameter>tenantId</parameter>/users/<parameter>userId</parameter>/groups</td>
+ <td colspan="3">Get groups for a user.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML User Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/userGroups.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON User Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/userGroups.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ </section>
+ <section>
+ <title>Tenant Groups</title>
+ <section>
+ <title>Create Tenant Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&POST;</td>
+ <td colspan="4"
+ >/tenant/<parameter>tenantId</parameter>/groups</td>
+ <td colspan="3">Creates a tenant group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>201</returnvalue></simpara>
+ <simpara>
+ &ERROR_CODES;
+ unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), userDisabled(<returnvalue>403</returnvalue>),
+ badRequest (<errorcode>400</errorcode>), groupConflict(<returnvalue>409</returnvalue>),
+ idmFault(<returnvalue>500</returnvalue>),
+ serviceUnavailable(<returnvalue>503</returnvalue>)
+ </simpara>
+ <example>
+ <title>XML Tenant Group Create Request</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/group-create.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Group Create Request</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/group-create.json" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>XML Tenant Group Create Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/group.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Group Create Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/group.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get Tenant Groups</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&GET;</td>
+ <td colspan="4"
+ >/tenant/<parameter>tenantId</parameter>/groups</td>
+ <td colspan="3">Get a list of tenant groups.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>
+ &ERROR_CODES;
+ unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), overLimit
+ (<returnvalue>413</returnvalue>), userDisabled
+ (<returnvalue>403</returnvalue>), badRequest
+ (<errorcode>400</errorcode>), idmFault
+ (<returnvalue>500</returnvalue>), serviceUnavailable
+ (<returnvalue>503</returnvalue>)
+ </simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Tenant Groups Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/groups.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Groups Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/groups.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get a Tenant Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&GET;</td>
+ <td colspan="4"
+ >/tenant/<parameter>tenantId</parameter>/groups/<parameter>groupId</parameter></td>
+ <td colspan="3">Get a tenant group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>
+ &ERROR_CODES;
+ unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), userDisabled(<returnvalue>403</returnvalue>),
+ badRequest (<errorcode>400</errorcode>), itemNotFound(<errorcode>404</errorcode>),
+ idmFault(<returnvalue>500</returnvalue>),
+ serviceUnavailable(<returnvalue>503</returnvalue>)
+ </simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Tenant Group Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/group.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Groups Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/group.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Update a Tenant Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&PUT;</td>
+ <td colspan="4">/tenant/<parameter>tenantId</parameter>/groups/<parameter>groupId</parameter></td>
+ <td colspan="3">Update a tenant group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>),
+ forbidden(<errorcode>403</errorcode>), itemNotFound(<errorcode>404</errorcode>),
+ badRequest (<errorcode>400</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML Tenant Group Update Request</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/group-updated.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Group Update Request</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/group-updated.json" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>XML Tenant Group Update Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/group-updated.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Group Update Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/group-updated.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Delete a Tenant Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&DELETE;</td>
+ <td colspan="4">/tenant/<parameter>tenantId</parameter>/groups/<parameter>groupId</parameter></td>
+ <td colspan="3">Delete a tenant group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>204</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ <section>
+ <title>Get Users in Tenant Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4"
+ >/tenants/<parameter>tenantId</parameter>/groups/<parameter>groupId</parameter>/users</td>
+ <td colspan="3"> Gets a list of users in a tenant group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized
+ (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden
+ (<errorcode>403</errorcode>), overLimit
+ (<errorcode>413</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable
+ (<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Tenant Group User List Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/users.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Tenant Group User List Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/users.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Add a User to a Tenant Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&PUT;</td>
+ <td colspan="4">/tenants/<parameter>tenantId</parameter>/groups/<parameter>groupId</parameter>/users</td>
+ <td colspan="3">Add a user to a tenant group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized
+ (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden
+ (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), usernameConflict
+ (<errorcode>409</errorcode>), emailConflict
+ (<errorcode>409</errorcode>), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable
+ (<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ <section>
+ <title>Remove a User from a Tenant Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&DELETE;</td>
+ <td colspan="4">/tenants/<parameter>tenantId</parameter>/groups/<parameter>groupId</parameter>/users</td>
+ <td colspan="3">Remove a user from a tenant group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>204</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized
+ (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden
+ (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), usernameConflict
+ (<errorcode>409</errorcode>), emailConflict
+ (<errorcode>409</errorcode>), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable
+ (<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ </section>
+ <section>
+ <title>Global Groups</title>
+ <section>
+ <title>Create a Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&POST;</td>
+ <td colspan="4">/groups</td>
+ <td colspan="3">Creates a group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>201</returnvalue></simpara>
+ <simpara>
+ &ERROR_CODES;
+ unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), userDisabled(<returnvalue>403</returnvalue>),
+ badRequest (<errorcode>400</errorcode>), groupConflict(<returnvalue>409</returnvalue>),
+ idmFault(<returnvalue>500</returnvalue>),
+ serviceUnavailable(<returnvalue>503</returnvalue>)
+ </simpara>
+ <example>
+ <title>XML Group Create Request</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/group-create.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Group Create Request</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/group-create.json" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>XML Group Create Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/group-create.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Group Create Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/group-create.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get Groups</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&GET;</td>
+ <td colspan="4">/groups</td>
+ <td colspan="3">Get a list of groups.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>
+ &ERROR_CODES;
+ unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), overLimit
+ (<returnvalue>413</returnvalue>), userDisabled
+ (<returnvalue>403</returnvalue>), badRequest
+ (<errorcode>400</errorcode>), idmFault
+ (<returnvalue>500</returnvalue>), serviceUnavailable
+ (<returnvalue>503</returnvalue>)
+ </simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Groups Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/groups-nt.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Groups Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/groups-nt.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Get a Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&GET;</td>
+ <td colspan="4">/groups/<parameter>groupId</parameter></td>
+ <td colspan="3">Get a group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>
+ &ERROR_CODES;
+ unauthorized (<errorcode>401</errorcode>), forbidden
+ (<returnvalue>403</returnvalue>), userDisabled(<returnvalue>403</returnvalue>),
+ badRequest (<errorcode>400</errorcode>), itemNotFound(<errorcode>404</errorcode>),
+ idmFault(<returnvalue>500</returnvalue>),
+ serviceUnavailable(<returnvalue>503</returnvalue>)
+ </simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Group Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/group-create.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Groups Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/group-create.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Update a Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&PUT;</td>
+ <td colspan="4">/groups/<parameter>groupId</parameter></td>
+ <td colspan="3">Update a group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>),
+ forbidden(<errorcode>403</errorcode>), itemNotFound(<errorcode>404</errorcode>),
+ badRequest (<errorcode>400</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ <example>
+ <title>XML Group Update Request</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/group-updated-nt.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Group Update Request</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/group-updated-nt.json" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>XML Group Update Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/group-updated-nt.xml" parse="text"/>
+ </programlisting>
+ </example>
+ <example>
+ <title>JSON Group Update Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/group-updated-nt.json" parse="text"/>
+ </programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Delete a Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&DELETE;</td>
+ <td colspan="4">/groups/<parameter>groupId</parameter></td>
+ <td colspan="3">Delete a group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>204</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ <section>
+ <title>Get Users in a Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1"> &GET; </td>
+ <td colspan="4">/groups/<parameter>groupId</parameter>/users</td>
+ <td colspan="3"> Gets a list of users in a group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue>, <returnvalue>203</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden(<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), idmFault (<errorcode>500</errorcode>),
+ serviceUnavailable(<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ <example>
+ <title>XML Group User List Response</title>
+ <programlisting language="xml">
+<xi:include href="../../formattedsamples/users.xml" parse="text"/>
+</programlisting>
+ </example>
+ <example>
+ <title>JSON Group User List Response</title>
+ <programlisting language="javascript">
+<xi:include href="../../formattedsamples/users.json" parse="text"/>
+</programlisting>
+ </example>
+ </section>
+ <section>
+ <title>Add a User to a Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&PUT;</td>
+ <td colspan="4">/groups/<parameter>groupId</parameter>/users</td>
+ <td colspan="3">Add a user to a group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>200</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized
+ (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden
+ (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), usernameConflict
+ (<errorcode>409</errorcode>), emailConflict
+ (<errorcode>409</errorcode>), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable
+ (<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ <section>
+ <title>Remove a User from a Group</title>
+ <informaltable rules="all">
+ &LONG_URI_REFHEAD;
+ <tbody>
+ <tr>
+ <td colspan="1">&DELETE;</td>
+ <td colspan="4">/groups/<parameter>groupId</parameter>/users</td>
+ <td colspan="3">Remove a user from a group.</td>
+ </tr>
+ </tbody>
+ </informaltable>
+ <simpara>&CODES;<returnvalue>204</returnvalue></simpara>
+ <simpara>&ERROR_CODES; unauthorized
+ (<errorcode>401</errorcode>), badRequest
+ (<errorcode>400</errorcode>), forbidden
+ (<errorcode>403</errorcode>), itemNotFound
+ (<errorcode>404</errorcode>), usernameConflict
+ (<errorcode>409</errorcode>), emailConflict
+ (<errorcode>409</errorcode>), idmFault
+ (<errorcode>500</errorcode>), serviceUnavailable
+ (<errorcode>503</errorcode>)</simpara>
+ &NO_REQUEST;
+ </section>
+ </section>
+ </chapter>
+</book>
diff --git a/docs/guide/src/docbkx/img/Check_mark_23x20_02.svg b/docs/guide/src/docbkx/img/Check_mark_23x20_02.svg
new file mode 100644
index 00000000..3051a2f9
--- /dev/null
+++ b/docs/guide/src/docbkx/img/Check_mark_23x20_02.svg
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="19.21315"
+ height="18.294994"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45"
+ sodipodi:modified="true"
+ version="1.0">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.9195959"
+ inkscape:cx="17.757032"
+ inkscape:cy="7.298821"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="984"
+ inkscape:window-height="852"
+ inkscape:window-x="148"
+ inkscape:window-y="66" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-192.905,-516.02064)">
+ <path
+ style="fill:#000000"
+ d="M 197.67968,534.31563 C 197.40468,534.31208 196.21788,532.53719 195.04234,530.37143 L 192.905,526.43368 L 193.45901,525.87968 C 193.76371,525.57497 194.58269,525.32567 195.27896,525.32567 L 196.5449,525.32567 L 197.18129,527.33076 L 197.81768,529.33584 L 202.88215,523.79451 C 205.66761,520.74678 208.88522,517.75085 210.03239,517.13691 L 212.11815,516.02064 L 207.90871,520.80282 C 205.59351,523.43302 202.45735,527.55085 200.93947,529.95355 C 199.42159,532.35625 197.95468,534.31919 197.67968,534.31563 z "
+ id="path2223" />
+ </g>
+</svg>
diff --git a/docs/guide/src/docbkx/samples/add-baseurl-input.xml b/docs/guide/src/docbkx/samples/add-baseurl-input.xml
new file mode 100644
index 00000000..ddbe52da
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/add-baseurl-input.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<baseURL xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ id="111114"
+ userType="NAST"
+ serviceName="cloudFiles"
+ region="DFW"
+ publicURL="https://storage.clouddrive.com/v1"
+ internalURL="https://storage-snet.clouddrive.com/v1"
+ adminURL="https://storage-snet.clouddrive.com/v1"
+ default="true"/>
diff --git a/docs/guide/src/docbkx/samples/add-baseurlRef-input.xml b/docs/guide/src/docbkx/samples/add-baseurlRef-input.xml
new file mode 100644
index 00000000..7dd65a08
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/add-baseurlRef-input.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<baseURLRef xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ id="111114"
+ href="https://storage-snet.clouddrive.com/v1"
+ v1Default="true"/>
diff --git a/docs/guide/src/docbkx/samples/addclient.json b/docs/guide/src/docbkx/samples/addclient.json
new file mode 100644
index 00000000..7a279e23
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/addclient.json
@@ -0,0 +1,4 @@
+{
+ "customerId": "RCN-000-000-000",
+ "name": "Test Application2"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/addclient.xml b/docs/guide/src/docbkx/samples/addclient.xml
new file mode 100644
index 00000000..85cf6b72
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/addclient.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<client xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ name="Test Application2"
+ customerId="RCN-000-000-000">
+</client> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/addedclient.json b/docs/guide/src/docbkx/samples/addedclient.json
new file mode 100644
index 00000000..76555364
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/addedclient.json
@@ -0,0 +1,12 @@
+{
+ "credentials": {
+ "clientSecret": "3af738fbeiwu23"
+ },
+ "clientId": "ab4820dhcb39347",
+ "customerId": "RCN-000-000-000",
+ "name": "Test Application2",
+ "inum": "@FFFF.FFFF.FFFF.FFFF!EEEE.EEEE!0001",
+ "status": "ACTIVE",
+ "locked": false,
+ "softDeleted": false
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/addedclient.xml b/docs/guide/src/docbkx/samples/addedclient.xml
new file mode 100644
index 00000000..f4631ad0
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/addedclient.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<client xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ softDeleted="false"
+ locked="false"
+ status="ACTIVE"
+ inum="@FFFF.FFFF.FFFF.FFFF!EEEE.EEEE!0001"
+ name="Test Application2"
+ customerId="RCN-000-000-000"
+ clientId="ab4820dhcb39347">
+ <credentials clientSecret="3af738fbeiwu23" />
+</client> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/addeduser.json b/docs/guide/src/docbkx/samples/addeduser.json
new file mode 100644
index 00000000..0566f29b
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/addeduser.json
@@ -0,0 +1,9 @@
+{"user":
+ {
+ "password": "P@ssword1",
+ "id": "jqsmith",
+ "tenantId": "12234",
+ "email": "john.smith@example.org",
+ "enabled" : true
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/addfirstuserresponse.json b/docs/guide/src/docbkx/samples/addfirstuserresponse.json
new file mode 100644
index 00000000..65115251
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/addfirstuserresponse.json
@@ -0,0 +1,7 @@
+{
+ "password": "P@ssword1",
+ "username": "jqsmith",
+ "tenantId": "12234",
+ "email": "john.smith@example.org",
+ "enabled" : true
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/addfirstuserresponse.xml b/docs/guide/src/docbkx/samples/addfirstuserresponse.xml
new file mode 100644
index 00000000..0b4f2259
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/addfirstuserresponse.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<user xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ email="john.smith@example.org"
+ tenantId="1234"
+ username="jqsmith"
+ enabled="true"
+ password="C@n+f001me!" /> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/adduser.json b/docs/guide/src/docbkx/samples/adduser.json
new file mode 100644
index 00000000..3bf8ca3b
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/adduser.json
@@ -0,0 +1,8 @@
+{"user":
+ {
+ "password": "P@ssword1",
+ "id": "jqsmith",
+ "tenantId": "12234",
+ "email": "john.smith@example.org"
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/adduser.xml b/docs/guide/src/docbkx/samples/adduser.xml
new file mode 100644
index 00000000..60816acd
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/adduser.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<user xmlns="http://docs.openstack.org/idm/api/v1.0"
+ email="john.smith@example.org" tenantId="1234"
+ id="jqsmith" password="C@n+f001me!"/>
diff --git a/docs/guide/src/docbkx/samples/adduserresponse.xml b/docs/guide/src/docbkx/samples/adduserresponse.xml
new file mode 100644
index 00000000..add18f52
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/adduserresponse.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<user xmlns="http://docs.openstack.org/idm/api/v1.0"
+ email="john.smith@example.org"
+ tenantId="1234" id="jqsmith"
+ enabled="true" password="C@n+f001me!"/>
diff --git a/docs/guide/src/docbkx/samples/auth.json b/docs/guide/src/docbkx/samples/auth.json
new file mode 100644
index 00000000..fe368811
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/auth.json
@@ -0,0 +1,48 @@
+{
+ "auth" : {
+ "token": {
+ "id": "ab48a9efdfedb23ty3494",
+ "expires": "2010-11-01T03:32:15-05:00"
+ },
+ "user" : {
+ "groups": {
+ "group": [
+ {
+ "tenantId" : "1234",
+ "name": "Admin"
+ }
+ ]},
+ "username": "jqsmith",
+ "tenantId": "1234",
+ }
+ "serviceCatalog" : {
+ "cloudFiles" : [
+ {
+ "region" : "DFW",
+ "publicURL" : "https://storage.clouddrive.com/v1/MossoCloudFS_blah-blah",
+ "internalURL" : "https://storage-snet.clouddrive.com/v1/MossoCloudFS_blah-blah"
+ },
+ {
+ "region" : "ORD",
+ "publicURL" : "https://otherstorage.clouddrive.com/v1/MossoCloudFS_blah-blah",
+ "internalURL" : "https://otherstorage-snet.clouddrive.com/v1/MossoCloudFS_blah-blah"
+ }
+ ],
+ "cloudFilesCDN" : [
+ {
+ "region" : "DFW",
+ "publicURL" : "https://cdn.clouddrive.com/v1/MossoCloudFS_blah-blah"
+ },
+ {
+ "region" : "ORD",
+ "publicURL" : "https://othercdn.clouddrive.com/v1/MossoCloudFS_blah-blah"
+ }
+ ],
+ "cloudServers" : [
+ {
+ "publicURL" : "https://servers.api.rackspacecloud.com/v1.0/322781"
+ }
+ ]
+ }
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/auth.xml b/docs/guide/src/docbkx/samples/auth.xml
new file mode 100644
index 00000000..3558798c
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/auth.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<auth xmlns="http://docs.openstack.org/idm/api/v1.0">
+ <token expires="2010-11-01T03:32:15-05:00"
+ id="ab48a9efdfedb23ty3494"/>
+ <user tenantId="1245" username="jqsmith">
+ <groups>
+ <group tenantId="1245" name="Admin"/>
+ </groups>
+ </user>
+ <serviceCatalog>
+ <service name="cloudFiles">
+ <endpoint
+ region="DFW"
+ publicURL="https://storage.clouddrive.com/v1/MossoCloudFS_blah-blah"
+ internalURL="https://storage-snet.clouddrive.com/v1/MossoCloudFS_blah-blah"/>
+ <endpoint
+ region="ORD"
+ publicURL="https://otherstorage.clouddrive.com/v1/MossoCloudFS_blah-blah"
+ internalURL="https://otherstorage-snet.clouddrive.com/v1/MossoCloudFS_blah-blah"/>
+ </service>
+ <service name="cloudFilesCDN">
+ <endpoint
+ region="DFW"
+ publicURL="https://cdn.clouddrive.com/v1/MossoCloudFS_blah-blah"/>
+ <endpoint
+ region="ORD"
+ publicURL="https://othercdn.clouddrive.com/v1/MossoCloudFS_blah-blah"/>
+ </service>
+ <service name="cloudServers">
+ <endpoint
+ publicURL="https://servers.api.rackspacecloud.com/v1.0/322781"/>
+ </service>
+ </serviceCatalog>
+</auth>
diff --git a/docs/guide/src/docbkx/samples/auth_credentials.json b/docs/guide/src/docbkx/samples/auth_credentials.json
new file mode 100644
index 00000000..67b06304
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/auth_credentials.json
@@ -0,0 +1,7 @@
+{
+ "passwordCredentials" : {
+ "username" : "test_user",
+ "password" : "a86850deb2742ec3cb41518e26aa2d89",
+ "tenantId" : "77654"
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/auth_credentials.xml b/docs/guide/src/docbkx/samples/auth_credentials.xml
new file mode 100644
index 00000000..fbdf5633
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/auth_credentials.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<passwordCredentials
+ xmlns="http://docs.openstack.org/idm/api/v1.0"
+ password="P@ssword1" username="testuser"
+ tenantId="77654"/>
diff --git a/docs/guide/src/docbkx/samples/bad_request.json b/docs/guide/src/docbkx/samples/bad_request.json
new file mode 100644
index 00000000..25796991
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/bad_request.json
@@ -0,0 +1,5 @@
+{
+ "message": "Bad Request!",
+ "details": "Error Details...",
+ "code": 400
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/bad_request.xml b/docs/guide/src/docbkx/samples/bad_request.xml
new file mode 100644
index 00000000..275a40b6
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/bad_request.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<badRequest xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ code="400">
+ <message>Bad Request!</message>
+ <details>Error Details...</details>
+</badRequest> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/baseURLRefs.json b/docs/guide/src/docbkx/samples/baseURLRefs.json
new file mode 100644
index 00000000..30e56d45
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/baseURLRefs.json
@@ -0,0 +1,27 @@
+{
+ "baseURLRefs" : [
+ {
+ "id" : 1,
+ "href" : "https://auth.api.rackspacecloud.com/v1.1/baseURLs/1",
+ "v1Default" : true
+ },
+ {
+ "id" : 2,
+ "href" : "https://auth.api.rackspacecloud.com/v1.1/baseURLs/2"
+ },
+ {
+ "id" : 3,
+ "href" : "https://auth.api.rackspacecloud.com/v1.1/baseURLs/3",
+ "v1Default" : true
+ },
+ {
+ "id" : 4,
+ "href" : "https://auth.api.rackspacecloud.com/v1.1/baseURLs/4"
+ },
+ {
+ "id" : 5,
+ "href" : "https://auth.api.rackspacecloud.com/v1.1/baseURLs/5",
+ "v1Default" : true
+ }
+ ]
+}
diff --git a/docs/guide/src/docbkx/samples/baseURLRefs.xml b/docs/guide/src/docbkx/samples/baseURLRefs.xml
new file mode 100644
index 00000000..a33c34e8
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/baseURLRefs.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<baseURLRefs xmlns="http://docs.rackspacecloud.com/auth/api/v1.1">
+ <baseURLRef
+ href="https://auth.api.rackspacecloud.com/v1.1/baseURLs/1"
+ id="1"
+ v1Default="true" />
+ <baseURLRef
+ href="https://auth.api.rackspacecloud.com/v1.1/baseURLs/2"
+ id="2" />
+ <baseURLRef
+ href="https://auth.api.rackspacecloud.com/v1.1/baseURLs/3"
+ id="3"
+ v1Default="true" />
+ <baseURLRef
+ href="https://auth.api.rackspacecloud.com/v1.1/baseURLs/4"
+ id="4" />
+ <baseURLRef
+ href="https://auth.api.rackspacecloud.com/v1.1/baseURLs/5"
+ id="5"
+ v1Default="true" />
+</baseURLRefs>
diff --git a/docs/guide/src/docbkx/samples/base_url_ref_response.json b/docs/guide/src/docbkx/samples/base_url_ref_response.json
new file mode 100644
index 00000000..65bc55c3
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/base_url_ref_response.json
@@ -0,0 +1,5 @@
+{
+ "id": 111111,
+ "href": "https://idm.rackspace.com/v1.0/baseurls/111111",
+ "v1Default": true
+}
diff --git a/docs/guide/src/docbkx/samples/base_url_ref_response.xml b/docs/guide/src/docbkx/samples/base_url_ref_response.xml
new file mode 100644
index 00000000..ab90847a
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/base_url_ref_response.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<baseURLRef xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ id="111111"
+ href="https://idm.rackspace.com/v1.0/baseurls/111111"
+ v1Default="true" />
diff --git a/docs/guide/src/docbkx/samples/base_url_response.json b/docs/guide/src/docbkx/samples/base_url_response.json
new file mode 100644
index 00000000..41ca4de6
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/base_url_response.json
@@ -0,0 +1,10 @@
+{
+ "id": 111111,
+ "userType": "NAST",
+ "serviceName": "cloudFiles",
+ "region": "DFW",
+ "publicURL": "https://storage.clouddrive.com/v1",
+ "internalURL": "https://storage-snet.clouddrive.com/v1",
+ "adminURL": null,
+ "default": true
+}
diff --git a/docs/guide/src/docbkx/samples/base_url_response.xml b/docs/guide/src/docbkx/samples/base_url_response.xml
new file mode 100644
index 00000000..8310eec4
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/base_url_response.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<Response xmlns="http://10.127.7.164/v1.0/baseurls/111111"
+ adminURL="https://storage-snet.clouddrive.com/v1"
+ default="true"
+ id="111111"
+ internalURL="https://storage-snet.clouddrive.com/v1"
+ publicURL="https://storage.clouddrive.com/v1"
+ region="DFW"
+ serviceName="cloudFiles"
+ userType="NAST"/>
+ \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/base_urls_response.json b/docs/guide/src/docbkx/samples/base_urls_response.json
new file mode 100644
index 00000000..284bccdb
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/base_urls_response.json
@@ -0,0 +1,22 @@
+{"baseURL": [
+ {
+ "id": 111111,
+ "userType": "NAST",
+ "serviceName": "cloudFiles",
+ "region": "DFW",
+ "publicURL": "https://storage.clouddrive.com/v1",
+ "internalURL": "https://storage-snet.clouddrive.com/v1",
+ "adminURL": null,
+ "default": true
+ },
+ {
+ "id": 222222,
+ "userType": "MOSSO",
+ "serviceName": "cloudServers",
+ "region": null,
+ "publicURL": "https://servers.api.rackspacecloud.com/v1.0",
+ "internalURL": null,
+ "adminURL": null,
+ "default": true
+ }
+]}
diff --git a/docs/guide/src/docbkx/samples/base_urls_response.xml b/docs/guide/src/docbkx/samples/base_urls_response.xml
new file mode 100644
index 00000000..eb52f45f
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/base_urls_response.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<baseURLs xmlns="http://docs.rackspacecloud.com/idm/api/v1.0">
+ <baseURL
+ id="111111"
+ userType="NAST"
+ serviceName="cloudFiles"
+ region="DFW"
+ publicURL="https://storage.clouddrive.com/v1"
+ internalURL="https://storage-snet.clouddrive.com/v1"
+ default="true"/>
+ <baseURL
+ id="222222"
+ userType="MOSSO"
+ serviceName="cloudServers"
+ publicURL="https://servers.api.rackspacecloud.com/v1.0"
+ default="true"/>
+</baseURLs>
diff --git a/docs/guide/src/docbkx/samples/choices.json b/docs/guide/src/docbkx/samples/choices.json
new file mode 100644
index 00000000..6b0b2607
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/choices.json
@@ -0,0 +1,50 @@
+{
+ "choices" : {
+ "values" : [
+ {
+ "id" : "v1.0",
+ "status" : "DEPRECATED",
+ "links": [
+ {
+ "rel" : "self",
+ "href" : "http://idm.api.openstack.org/v1.0/tenants/12"
+ }
+ ],
+ "media-types": {
+ "values" : [
+ {
+ "base" : "application/xml",
+ "type" : "application/vnd.openstack.idm-v1.0+xml"
+ },
+ {
+ "base" : "application/json",
+ "type" : "application/vnd.openstack.idm-v1.0+json"
+ }
+ ]
+ }
+ },
+ {
+ "id" : "v1.1",
+ "status" : "CURRENT",
+ "links": [
+ {
+ "rel" : "self",
+ "href" : "http://idm.api.openstack.org/v1.1/tenants/12"
+ }
+ ],
+ "media-types": {
+ "values" : [
+ {
+ "base" : "application/xml",
+ "type" : "application/vnd.openstack.idm-v1.1+xml"
+ },
+ {
+ "base" : "application/json",
+ "type" : "application/vnd.openstack.idm-v1.1+json"
+ }
+ ]
+ }
+ }
+ ]
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/choices.xml b/docs/guide/src/docbkx/samples/choices.xml
new file mode 100644
index 00000000..a9a91ece
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/choices.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<choices xmlns="http://docs.openstack.org/common/api/v1.0"
+ xmlns:atom="http://www.w3.org/2005/Atom">
+
+ <version id="v1.0" status="DEPRECATED">
+ <media-types>
+ <media-type base="application/xml"
+ type="application/vnd.openstack.idm-v1.0+xml"/>
+ <media-type base="application/json"
+ type="application/vnd.openstack.idm-v1.0+json"/>
+ </media-types>
+
+ <atom:link rel="self"
+ href="http://idm.api.openstack.org/v1.0/tenants/12"/>
+ </version>
+
+ <version id="v1.1" status="CURRENT">
+ <media-types>
+ <media-type base="application/xml"
+ type="application/vnd.openstack.idm-v1.1+xml"/>
+ <media-type base="application/json"
+ type="application/vnd.openstack.idm-v1.1+json"/>
+ </media-types>
+
+ <atom:link rel="self"
+ href="http://idm.api.openstack.org/v1.1/tenants/12"/>
+ </version>
+</choices>
diff --git a/docs/guide/src/docbkx/samples/client-credentials-response.json b/docs/guide/src/docbkx/samples/client-credentials-response.json
new file mode 100644
index 00000000..96f07aaa
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/client-credentials-response.json
@@ -0,0 +1,3 @@
+{
+ "clientSecret" : "eca2d413a1790dc6473842ab5a49387a29996757"
+}
diff --git a/docs/guide/src/docbkx/samples/client-credentials-response.xml b/docs/guide/src/docbkx/samples/client-credentials-response.xml
new file mode 100644
index 00000000..dd881ca5
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/client-credentials-response.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<clientCredentials xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ clientSecret="c582fe94dda4c0da19bf234c504db0b63df96daa" />
diff --git a/docs/guide/src/docbkx/samples/client.json b/docs/guide/src/docbkx/samples/client.json
new file mode 100644
index 00000000..faef1dd0
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/client.json
@@ -0,0 +1,16 @@
+{ "permissions": {
+ "permission": [
+ {
+ "resourceId": "addCustomer",
+ "customerId": "RCN-000-000-000",
+ "clientId": "IDM"
+ }
+ ]},
+ "clientId": "ab4820dhcb39347",
+ "customerId": "RCN-000-000-000",
+ "name": "Test Application2",
+ "inum": "@FFFF.FFFF.FFFF.FFFF!EEEE.EEEE!0001",
+ "status": "ACTIVE",
+ "locked": false,
+ "softDeleted": false
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/client.xml b/docs/guide/src/docbkx/samples/client.xml
new file mode 100644
index 00000000..e2a621bc
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/client.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<client xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ softDeleted="false"
+ locked="false"
+ status="ACTIVE"
+ iname="@Rackspace*Rackspace*ControlPanel"
+ inum="@FFFF.FFFF.FFFF.FFFF!EEEE.EEEE!0001"
+ name="Test Application2"
+ customerId="RCN-000-000-000"
+ clientId="ab4820dhcb39347">
+ <permissions>
+ <permission clientId="IDM"
+ customerId="RCN-000-000-000"
+ resourceId="addCustomer" />
+ </permissions>
+</client> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/clientGroup.json b/docs/guide/src/docbkx/samples/clientGroup.json
new file mode 100644
index 00000000..75e81859
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/clientGroup.json
@@ -0,0 +1,4 @@
+{
+ "tenantId" : "1234",
+ "name" : "Admin"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/clientGroup.xml b/docs/guide/src/docbkx/samples/clientGroup.xml
new file mode 100644
index 00000000..55ef0456
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/clientGroup.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<group xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ tenantId="1234"
+ name="Admin" /> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/clientGroups.json b/docs/guide/src/docbkx/samples/clientGroups.json
new file mode 100644
index 00000000..b8c62c93
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/clientGroups.json
@@ -0,0 +1,6 @@
+{"group": [
+ {
+ "tenantId" : "1234",
+ "name" : "Admin"
+ }]
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/clientGroups.xml b/docs/guide/src/docbkx/samples/clientGroups.xml
new file mode 100644
index 00000000..e761dc94
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/clientGroups.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<groups xmlns="http://docs.rackspacecloud.com/idm/api/v1.0">
+ <group xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ tenantId="1234"
+ name="Admin" />
+</groups> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/clientWithOnlySoftDeleted.json b/docs/guide/src/docbkx/samples/clientWithOnlySoftDeleted.json
new file mode 100644
index 00000000..410afe99
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/clientWithOnlySoftDeleted.json
@@ -0,0 +1,3 @@
+{
+ "softDeleted": "true"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/clientWithOnlySoftDeleted.xml b/docs/guide/src/docbkx/samples/clientWithOnlySoftDeleted.xml
new file mode 100644
index 00000000..8c73be48
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/clientWithOnlySoftDeleted.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<client xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ softDeleted="true" /> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/client_credentials.json b/docs/guide/src/docbkx/samples/client_credentials.json
new file mode 100644
index 00000000..3de72a8f
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/client_credentials.json
@@ -0,0 +1,3 @@
+{
+ "clientSecret": "cncv9823823bfb"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/client_credentials.xml b/docs/guide/src/docbkx/samples/client_credentials.xml
new file mode 100644
index 00000000..c9eba3bd
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/client_credentials.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<clientCredentials xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ clientSecret="cncv9823823bfb" /> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/clientname_conflict.json b/docs/guide/src/docbkx/samples/clientname_conflict.json
new file mode 100644
index 00000000..9b064015
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/clientname_conflict.json
@@ -0,0 +1,5 @@
+{
+ "message": "Clientname already taken.",
+ "details": "Error Details...",
+ "code": 409
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/clientname_conflict.xml b/docs/guide/src/docbkx/samples/clientname_conflict.xml
new file mode 100644
index 00000000..0694d96e
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/clientname_conflict.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<clientnameConflict xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ code="409">
+ <message>Clientname already taken.</message>
+ <details>Error Details...</details>
+</clientnameConflict> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/clients.json b/docs/guide/src/docbkx/samples/clients.json
new file mode 100644
index 00000000..3c5193eb
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/clients.json
@@ -0,0 +1,22 @@
+{
+ "client": [
+ {
+ "clientId": "ab4820dhcb39347",
+ "customerId": "RCN-000-000-000",
+ "name": "Test Application2",
+ "inum": "@FFFF.FFFF.FFFF.FFFF!EEEE.EEEE!0001",
+ "status": "ACTIVE",
+ "locked": false,
+ "softDeleted": false
+ },
+ {
+ "clientId": "632h389cv902bde",
+ "customerId": "RCN-000-000-000",
+ "name": "Test Application2",
+ "inum": "@FFFF.FFFF.FFFF.FFFF!EEEE.EEEE!0002",
+ "status": "ACTIVE",
+ "locked": false,
+ "softDeleted": false
+ }
+ ]
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/clients.xml b/docs/guide/src/docbkx/samples/clients.xml
new file mode 100644
index 00000000..2d870f9b
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/clients.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<clients xmlns="http://docs.rackspacecloud.com/idm/api/v1.0">
+ <client
+ softDeleted="false"
+ locked="false"
+ status="ACTIVE"
+ inum="@FFFF.FFFF.FFFF.FFFF!EEEE.EEEE!0001"
+ name="Test Application2"
+ customerId="RCN-000-000-000"
+ clientId="ab4820dhcb39347">
+ </client>
+ <client
+ softDeleted="false"
+ locked="false"
+ status="ACTIVE"
+ inum="@FFFF.FFFF.FFFF.FFFF!EEEE.EEEE!0002"
+ name="Test Application2"
+ customerId="RCN-000-000-000"
+ clientId="632h389cv902bde">
+ </client>
+</clients> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/customer.json b/docs/guide/src/docbkx/samples/customer.json
new file mode 100644
index 00000000..7ff7ce32
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/customer.json
@@ -0,0 +1,7 @@
+{"tenant":
+ {
+ "id": "1234",
+ "description": "A description ...",
+ "enabled": true
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/customer.xml b/docs/guide/src/docbkx/samples/customer.xml
new file mode 100644
index 00000000..ea6a63dc
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/customer.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tenant xmlns="http://docs.openstack.org/idm/api/v1.0"
+ enabled="true" id="1234">
+ <description>A description...</description>
+</tenant>
diff --git a/docs/guide/src/docbkx/samples/customer_conflict.json b/docs/guide/src/docbkx/samples/customer_conflict.json
new file mode 100644
index 00000000..4fd3a6a8
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/customer_conflict.json
@@ -0,0 +1,5 @@
+{
+ "message": "CustomerId already taken.",
+ "details": "Error Details...",
+ "code": 409
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/customer_conflict.xml b/docs/guide/src/docbkx/samples/customer_conflict.xml
new file mode 100644
index 00000000..5641ad34
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/customer_conflict.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<customerIdConflict xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ code="409">
+ <message>CustomerId already taken.</message>
+ <details>Error Details...</details>
+</customerIdConflict> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/customerlock.json b/docs/guide/src/docbkx/samples/customerlock.json
new file mode 100644
index 00000000..584c21a4
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/customerlock.json
@@ -0,0 +1,5 @@
+{"tenant":
+ {
+ "description": "A NEW description..."
+ }
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/customerlock.xml b/docs/guide/src/docbkx/samples/customerlock.xml
new file mode 100644
index 00000000..9d7081d4
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/customerlock.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tenant xmlns="http://docs.openstack.org/idm/api/v1.0">
+ <description>A NEW description...</description>
+</tenant>
diff --git a/docs/guide/src/docbkx/samples/customers.json b/docs/guide/src/docbkx/samples/customers.json
new file mode 100644
index 00000000..7fb848f7
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/customers.json
@@ -0,0 +1,15 @@
+{"tenants": {
+ "values" : [
+ {
+ "id": "1234",
+ "description": "A description ...",
+ "enabled": true
+ },
+ {
+ "id": "3456",
+ "description": "A description ...",
+ "enabled": true
+ }
+ ]
+}
+}
diff --git a/docs/guide/src/docbkx/samples/customers.xml b/docs/guide/src/docbkx/samples/customers.xml
new file mode 100644
index 00000000..9b503ce2
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/customers.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tenants xmlns="http://docs.openstack.org/idm/api/v1.0">
+ <tenant enabled="true" id="1234">
+ <description>A description...</description>
+ </tenant>
+ <tenant enabled="true" id="3645">
+ <description>A description...</description>
+ </tenant>
+</tenants>
diff --git a/docs/guide/src/docbkx/samples/definedpermissions.json b/docs/guide/src/docbkx/samples/definedpermissions.json
new file mode 100644
index 00000000..f725235c
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/definedpermissions.json
@@ -0,0 +1,16 @@
+{
+ "defined": {
+ "permission": [
+ {
+ "permissionId": "addCustomer",
+ "customerId": "RCN-000-000-000",
+ "clientId": "IDM"
+ },
+ {
+ "permissionId": "getCustomer",
+ "customerId": "RCN-000-000-000",
+ "clientId": "IDM"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/definedpermissions.xml b/docs/guide/src/docbkx/samples/definedpermissions.xml
new file mode 100644
index 00000000..b8b28a5b
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/definedpermissions.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<permissions xmlns="http://docs.rackspacecloud.com/idm/api/v1.0">
+ <defined>
+ <permission
+ clientId="IDM"
+ customerId="RCN-000-000-000"
+ permissionId="addCustomer"/>
+ <permission
+ clientId="IDM"
+ customerId="RCN-000-000-000"
+ permissionId="getCustomer"/>
+ </defined>
+</permissions> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/email_conflict.json b/docs/guide/src/docbkx/samples/email_conflict.json
new file mode 100644
index 00000000..aa9ba6ef
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/email_conflict.json
@@ -0,0 +1,5 @@
+{
+ "message": "Email Address already taken.",
+ "details": "Error Details...",
+ "code": 409
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/email_conflict.xml b/docs/guide/src/docbkx/samples/email_conflict.xml
new file mode 100644
index 00000000..c30052bc
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/email_conflict.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<emailConflict xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ code="409">
+ <message>Email Address already taken.</message>
+ <details>Error Details...</details>
+</emailConflict> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/ext-getuser.json b/docs/guide/src/docbkx/samples/ext-getuser.json
new file mode 100644
index 00000000..03f74dda
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/ext-getuser.json
@@ -0,0 +1,21 @@
+{"user":
+ {
+ "groups": {
+ "values": [
+ {
+ "tenantId" : "1234",
+ "id": "Admin"
+ }
+ ]},
+ "id": "jqsmith",
+ "tenantId": "1234",
+ "email": "john.smith@example.org",
+ "enabled": true,
+ "RS-META:metadata" : {
+ "values" : {
+ "MetaKey1" : "MetaValue1",
+ "MetaKey2" : "MetaValue2"
+ }
+ },
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/ext-getuser.xml b/docs/guide/src/docbkx/samples/ext-getuser.xml
new file mode 100644
index 00000000..07c185b1
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/ext-getuser.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<user xmlns="http://docs.openstack.org/idm/api/v1.0"
+ enabled="true" email="john.smith@example.org"
+ tenantId="1234" id="jqsmith">
+ <groups>
+ <group tenantId="1234" id="Admin"/>
+ </groups>
+ <metadata
+ xmlns="http://docs.rackspacecloud.com/idm/api/ext/meta/v1.0">
+ <meta key="MetaKey1">MetaValue1</meta>
+ <meta key="MetaKey2">MetaValue2</meta>
+ </metadata>
+</user>
diff --git a/docs/guide/src/docbkx/samples/extension.json b/docs/guide/src/docbkx/samples/extension.json
new file mode 100644
index 00000000..1d7e8bb3
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/extension.json
@@ -0,0 +1,21 @@
+{
+ "extension" : {
+ "name" : "User Metadata Extension",
+ "namespace" : "http://docs.rackspacecloud.com/idm/api/ext/meta/v1.0",
+ "alias" : "RS-META",
+ "updated" : "2011-01-12T11:22:33-06:00",
+ "description" : "Allows associating arbritrary metadata with a user.",
+ "links" : [
+ {
+ "rel" : "describedby",
+ "type" : "application/pdf",
+ "href" : "http://docs.rackspacecloud.com/idm/api/ext/idm-meta-20111201.pdf"
+ },
+ {
+ "rel" : "describedby",
+ "type" : "application/vnd.sun.wadl+xml",
+ "href" : "http://docs.rackspacecloud.com/idm/api/ext/idm-cbs.wadl"
+ }
+ ]
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/extension.xml b/docs/guide/src/docbkx/samples/extension.xml
new file mode 100644
index 00000000..8d932f49
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/extension.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<extension xmlns="http://docs.openstack.org/common/api/v1.0"
+ xmlns:atom="http://www.w3.org/2005/Atom"
+ name="User Metadata Extension"
+ namespace="http://docs.rackspacecloud.com/idm/api/ext/meta/v1.0"
+ alias="RS-META"
+ updated="2011-01-12T11:22:33-06:00">
+
+ <description>
+ Allows associating arbritrary metadata with a user.
+ </description>
+
+ <atom:link rel="describedby"
+ type="application/pdf"
+ href="http://docs.rackspacecloud.com/idm/api/ext/idm-meta-20111201.pdf"/>
+ <atom:link rel="describedby"
+ type="application/vnd.sun.wadl+xml"
+ href="http://docs.rackspacecloud.com/idm/api/ext/idm-meta.wadl"/>
+
+</extension>
+
+
diff --git a/docs/guide/src/docbkx/samples/extensions.json b/docs/guide/src/docbkx/samples/extensions.json
new file mode 100644
index 00000000..88538770
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/extensions.json
@@ -0,0 +1,42 @@
+{
+ "extensions" : [
+ {
+ "name" : "Reset Password Extension",
+ "namespace" : "http://docs.rackspacecloud.com/idm/api/ext/rpe/v1.0",
+ "alias" : "RS-RPE",
+ "updated" : "2011-01-22T13:25:27-06:00",
+ "description" : "Adds the capability to reset a user's password. The user is emailed when the password has been reset.",
+ "links" : [
+ {
+ "rel" : "describedby",
+ "type" : "application/pdf",
+ "href" : "http://docs.rackspacecloud.com/idm/api/ext/idm-rpe-20111111.pdf"
+ },
+ {
+ "rel" : "describedby",
+ "type" : "application/vnd.sun.wadl+xml",
+ "href" : "http://docs.rackspacecloud.com/idm/api/ext/idm-rpe.wadl"
+ }
+ ]
+ },
+ {
+ "name" : "User Metadata Extension",
+ "namespace" : "http://docs.rackspacecloud.com/idm/api/ext/meta/v1.0",
+ "alias" : "RS-META",
+ "updated" : "2011-01-12T11:22:33-06:00",
+ "description" : "Allows associating arbritrary metadata with a user.",
+ "links" : [
+ {
+ "rel" : "describedby",
+ "type" : "application/pdf",
+ "href" : "http://docs.rackspacecloud.com/idm/api/ext/idm-meta-20111201.pdf"
+ },
+ {
+ "rel" : "describedby",
+ "type" : "application/vnd.sun.wadl+xml",
+ "href" : "http://docs.rackspacecloud.com/idm/api/ext/idm-cbs.wadl"
+ }
+ ]
+ }
+ ]
+}
diff --git a/docs/guide/src/docbkx/samples/extensions.xml b/docs/guide/src/docbkx/samples/extensions.xml
new file mode 100644
index 00000000..ddd7e173
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/extensions.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<extensions xmlns="http://docs.openstack.org/common/api/v1.0"
+ xmlns:atom="http://www.w3.org/2005/Atom">
+ <extension
+ name="Reset Password Extension"
+ namespace="http://docs.rackspacecloud.com/idm/api/ext/rpe/v1.0"
+ alias="RS-RPE"
+ updated="2011-01-22T13:25:27-06:00">
+
+ <description>
+ Adds the capability to reset a user's password. The user is
+ emailed when the password has been reset.
+ </description>
+
+ <atom:link rel="describedby"
+ type="application/pdf"
+ href="http://docs.rackspacecloud.com/idm/api/ext/idm-rpe-20111111.pdf"/>
+ <atom:link rel="describedby"
+ type="application/vnd.sun.wadl+xml"
+ href="http://docs.rackspacecloud.com/idm/api/ext/idm-rpe.wadl"/>
+ </extension>
+ <extension
+ name="User Metadata Extension"
+ namespace="http://docs.rackspacecloud.com/idm/api/ext/meta/v1.0"
+ alias="RS-META"
+ updated="2011-01-12T11:22:33-06:00">
+ <description>
+ Allows associating arbritrary metadata with a user.
+ </description>
+
+ <atom:link rel="describedby"
+ type="application/pdf"
+ href="http://docs.rackspacecloud.com/idm/api/ext/idm-meta-20111201.pdf"/>
+ <atom:link rel="describedby"
+ type="application/vnd.sun.wadl+xml"
+ href="http://docs.rackspacecloud.com/idm/api/ext/idm-meta.wadl"/>
+ </extension>
+</extensions>
diff --git a/docs/guide/src/docbkx/samples/feed.xml b/docs/guide/src/docbkx/samples/feed.xml
new file mode 100644
index 00000000..15603de1
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/feed.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<feed xmlns="http://www.w3.org/2005/Atom"
+ xml:lang="en-US">
+<entry>
+ <title>User, "mkovacs" was modified.</title>
+ <summary>User, "mkovacs" was modified.</summary>
+ <link rel="actual"
+ href="/customers/RCN-000-000-000/users/mkovacs" />
+ <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
+ <updated>2003-12-13T18:30:02Z</updated>
+</entry>
+<entry>
+ <title>User, "hueyly" was created.</title>
+ <summary>User, "hueyly" was created.</summary>
+ <link rel="actual"
+ href="/customers/RCN-000-000-000/users/hueyly" />
+ <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-920474efa234</id>
+ <updated>2003-12-13T18:29:20Z</updated>
+</entry>
+</feed> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/forbidden.json b/docs/guide/src/docbkx/samples/forbidden.json
new file mode 100644
index 00000000..48b23ea5
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/forbidden.json
@@ -0,0 +1,5 @@
+{
+ "message": "Forbidden",
+ "details": "Error Details...",
+ "code": 403
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/forbidden.xml b/docs/guide/src/docbkx/samples/forbidden.xml
new file mode 100644
index 00000000..23123805
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/forbidden.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<forbidden xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ code="403">
+ <message>Forbidden</message>
+ <details>Error Details...</details>
+</forbidden> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/forgot_password.json b/docs/guide/src/docbkx/samples/forgot_password.json
new file mode 100644
index 00000000..e8d2114a
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/forgot_password.json
@@ -0,0 +1,17 @@
+{
+ "customParams" : [
+ {
+ "name": "%%FirstName%%",
+ "value": "Steve"
+ },
+ {
+ "name": "%%LastName%%",
+ "value": "Smith"
+ }
+ ],
+ "templateUrl": "http://cp.rackspace.com/files/passwordRecovery.txt",
+ "callbackUrl": "http://cp.rackspace.com/passwordRecovery.html",
+ "from": "Rackspace Control Panel",
+ "replyTo": "cpsupport@rackspace.com",
+ "subject": "Rackspace Password Reset"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/forgot_password.xml b/docs/guide/src/docbkx/samples/forgot_password.xml
new file mode 100644
index 00000000..53a7a1a8
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/forgot_password.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<passwordRecovery xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ templateUrl="http://cp.rackspace.com/files/passwordRecovery.txt"
+ callbackUrl="http://cp.rackspace.com/passwordRecovery.html"
+ from="Rackspace Control Panel"
+ replyTo="cpsupport@rackspace.com"
+ subject="Rackspace Password Reset">
+ <customParams>
+ <customParam name="%%FirstName%%" value="Steve" />
+ <customParam name="%%LastName%%" value="Smith" />
+ </customParams>
+</passwordRecovery> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/getuser-1.json b/docs/guide/src/docbkx/samples/getuser-1.json
new file mode 100644
index 00000000..544d4600
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/getuser-1.json
@@ -0,0 +1,29 @@
+{"user":
+ {
+ "groups": {
+ "values": [
+ {
+ "tenantId" : "1234",
+ "id": "Admin"
+ },
+ {
+ "tenantId" : "1234",
+ "id" : "DBUser"
+ },
+ {
+ "id" : "Super"
+ }
+ ],
+ "links" : [
+ {
+ "rel" : "next",
+ "href" : "http://idm.api.openstack.org/v1.0/1234/tenants/1234/users/jqsmith/groups?marker=Super"
+ }
+ ]
+ },
+ "id": "jqsmith",
+ "tenantId": "1234",
+ "email": "john.smith@example.org",
+ "enabled": true
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/getuser-1.xml b/docs/guide/src/docbkx/samples/getuser-1.xml
new file mode 100644
index 00000000..2b513072
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/getuser-1.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<user xmlns="http://docs.openstack.org/idm/api/v1.0"
+ xmlns:atom="http://www.w3.org/2005/Atom"
+ enabled="true" email="john.smith@example.org"
+ tenantId="1234" id="jqsmith">
+ <groups>
+ <group tenantId="1234" id="Admin"/>
+ <group tenantId="1234" id="DBUser"/>
+ <group id="Super"/>
+ <atom:link
+ rel="next"
+ href="http://idm.api.openstack.org/v1.0/1234/tenants/1234/users/jqsmith/groups?marker=Super"/>
+ </groups>
+</user>
diff --git a/docs/guide/src/docbkx/samples/getuser-with-mosso-id.json b/docs/guide/src/docbkx/samples/getuser-with-mosso-id.json
new file mode 100644
index 00000000..4ba14bbc
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/getuser-with-mosso-id.json
@@ -0,0 +1,20 @@
+{
+ "username": "qauser",
+ "customerId": "RCN-QATestingCustomer",
+ "customerInum": "@!FFFF.FFFF.FFFF.FFFF!EEEE.999",
+ "email": "quauser@example.com",
+ "personId": "RPN-qauser-000-10001",
+ "firstName": "qauser",
+ "middleName": "none",
+ "lastName": "Tester",
+ "displayName": "qauser",
+ "prefLanguage": "en-us",
+ "inum": "@!FFFF.FFFF.FFFF.FFFF!EEEE.999!10001",
+ "status": "ACTIVE",
+ "locked": false,
+ "softDeleted": false,
+ "country": "USA",
+ "timeZone": "America/Chicago",
+ "mossoId": 999112358,
+ "nastId": "nastid-qauser"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/getuser-with-mosso-id.xml b/docs/guide/src/docbkx/samples/getuser-with-mosso-id.xml
new file mode 100644
index 00000000..26c12ede
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/getuser-with-mosso-id.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<user xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ username="qauser"
+ customerId="RCN-QATestingCustomer"
+ customerInum="@!FFFF.FFFF.FFFF.FFFF!EEEE.999"
+ email="quauser@example.com"
+ personId="RPN-qauser-000-10001"
+ firstName="qauser"
+ middleName="none"
+ lastName="Tester"
+ displayName="qauser"
+ prefLanguage="en-us"
+ inum="@!FFFF.FFFF.FFFF.FFFF!EEEE.999!10001"
+ status="ACTIVE"
+ locked="false"
+ softDeleted="false"
+ country="USA"
+ timeZone="America/Chicago"
+ mossoId="999112358"
+ nastId="nastid-qauser"/>
diff --git a/docs/guide/src/docbkx/samples/getuser-with-nast-id.json b/docs/guide/src/docbkx/samples/getuser-with-nast-id.json
new file mode 100644
index 00000000..4ba14bbc
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/getuser-with-nast-id.json
@@ -0,0 +1,20 @@
+{
+ "username": "qauser",
+ "customerId": "RCN-QATestingCustomer",
+ "customerInum": "@!FFFF.FFFF.FFFF.FFFF!EEEE.999",
+ "email": "quauser@example.com",
+ "personId": "RPN-qauser-000-10001",
+ "firstName": "qauser",
+ "middleName": "none",
+ "lastName": "Tester",
+ "displayName": "qauser",
+ "prefLanguage": "en-us",
+ "inum": "@!FFFF.FFFF.FFFF.FFFF!EEEE.999!10001",
+ "status": "ACTIVE",
+ "locked": false,
+ "softDeleted": false,
+ "country": "USA",
+ "timeZone": "America/Chicago",
+ "mossoId": 999112358,
+ "nastId": "nastid-qauser"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/getuser-with-nast-id.xml b/docs/guide/src/docbkx/samples/getuser-with-nast-id.xml
new file mode 100644
index 00000000..26c12ede
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/getuser-with-nast-id.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<user xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ username="qauser"
+ customerId="RCN-QATestingCustomer"
+ customerInum="@!FFFF.FFFF.FFFF.FFFF!EEEE.999"
+ email="quauser@example.com"
+ personId="RPN-qauser-000-10001"
+ firstName="qauser"
+ middleName="none"
+ lastName="Tester"
+ displayName="qauser"
+ prefLanguage="en-us"
+ inum="@!FFFF.FFFF.FFFF.FFFF!EEEE.999!10001"
+ status="ACTIVE"
+ locked="false"
+ softDeleted="false"
+ country="USA"
+ timeZone="America/Chicago"
+ mossoId="999112358"
+ nastId="nastid-qauser"/>
diff --git a/docs/guide/src/docbkx/samples/getuser-with-username.json b/docs/guide/src/docbkx/samples/getuser-with-username.json
new file mode 100644
index 00000000..4ba14bbc
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/getuser-with-username.json
@@ -0,0 +1,20 @@
+{
+ "username": "qauser",
+ "customerId": "RCN-QATestingCustomer",
+ "customerInum": "@!FFFF.FFFF.FFFF.FFFF!EEEE.999",
+ "email": "quauser@example.com",
+ "personId": "RPN-qauser-000-10001",
+ "firstName": "qauser",
+ "middleName": "none",
+ "lastName": "Tester",
+ "displayName": "qauser",
+ "prefLanguage": "en-us",
+ "inum": "@!FFFF.FFFF.FFFF.FFFF!EEEE.999!10001",
+ "status": "ACTIVE",
+ "locked": false,
+ "softDeleted": false,
+ "country": "USA",
+ "timeZone": "America/Chicago",
+ "mossoId": 999112358,
+ "nastId": "nastid-qauser"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/getuser-with-username.xml b/docs/guide/src/docbkx/samples/getuser-with-username.xml
new file mode 100644
index 00000000..5e92fb9c
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/getuser-with-username.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<user xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ username="qauser"
+ customerId="RCN-QATestingCustomer"
+ customerInum="@!FFFF.FFFF.FFFF.FFFF!EEEE.999"
+ email="quauser@example.com"
+ personId="RPN-qauser-000-10001"
+ firstName="qauser"
+ middleName="none"
+ lastName="Tester"
+ displayName="qauser"
+ prefLanguage="en-us"
+ inum="@!FFFF.FFFF.FFFF.FFFF!EEEE.999!10001"
+ status="ACTIVE"
+ locked="false"
+ softDeleted="false"
+ country="USA"
+ timeZone="America/Chicago"
+ mossoId="999112358"
+ nastId="nastid-qauser"/>
diff --git a/docs/guide/src/docbkx/samples/getuser.json b/docs/guide/src/docbkx/samples/getuser.json
new file mode 100644
index 00000000..b9d00949
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/getuser.json
@@ -0,0 +1,15 @@
+{"user":
+ {
+ "groups": {
+ "values": [
+ {
+ "tenantId" : "1234",
+ "id": "Admin"
+ }
+ ]},
+ "id": "jqsmith",
+ "tenantId": "1234",
+ "email": "john.smith@example.org",
+ "enabled": true
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/getuser.xml b/docs/guide/src/docbkx/samples/getuser.xml
new file mode 100644
index 00000000..095db4ef
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/getuser.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<user xmlns="http://docs.openstack.org/idm/api/v1.0"
+ enabled="true" email="john.smith@example.org"
+ tenantId="1234" id="jqsmith">
+ <groups>
+ <group tenantId="1234" id="Admin"/>
+ </groups>
+</user>
diff --git a/docs/guide/src/docbkx/samples/globalgroup.json b/docs/guide/src/docbkx/samples/globalgroup.json
new file mode 100644
index 00000000..8c524d61
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/globalgroup.json
@@ -0,0 +1,6 @@
+{"group":
+ {
+ "name" : "Admin",
+ "description" : "A description ..."
+ }
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/globalgroup.xml b/docs/guide/src/docbkx/samples/globalgroup.xml
new file mode 100644
index 00000000..387611c9
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/globalgroup.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<group xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ name="Admin"
+ description="A description..." /> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/globalgroups.json b/docs/guide/src/docbkx/samples/globalgroups.json
new file mode 100644
index 00000000..523bb222
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/globalgroups.json
@@ -0,0 +1,10 @@
+{"groups": [
+ {
+ "name" : "Admin",
+ "description" : "A description ..."
+ },
+ {
+ "name" : "Technical",
+ "description" : "Another description ..."
+ }]
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/globalgroups.xml b/docs/guide/src/docbkx/samples/globalgroups.xml
new file mode 100644
index 00000000..c272f370
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/globalgroups.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<groups xmlns="http://docs.rackspacecloud.com/idm/api/v1.0">
+ <group
+ name="Admin"
+ description="A description..."/>
+ <group
+ name="Technical"
+ description="Another description..."/>
+</groups> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/grantedpermissions.json b/docs/guide/src/docbkx/samples/grantedpermissions.json
new file mode 100644
index 00000000..8269646e
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/grantedpermissions.json
@@ -0,0 +1,16 @@
+{
+ "granted": {
+ "permission": [
+ {
+ "permissionId": "addCustomer",
+ "customerId": "RCN-000-000-000",
+ "clientId": "IDM"
+ },
+ {
+ "permissionId": "getCustomer",
+ "customerId": "RCN-000-000-000",
+ "clientId": "IDM"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/grantedpermissions.xml b/docs/guide/src/docbkx/samples/grantedpermissions.xml
new file mode 100644
index 00000000..07ca960d
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/grantedpermissions.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<permissions xmlns="http://docs.rackspacecloud.com/idm/api/v1.0">
+ <granted>
+ <permission
+ clientId="IDM"
+ customerId="RCN-000-000-000"
+ permissionId="addCustomer"/>
+ <permission
+ clientId="IDM"
+ customerId="RCN-000-000-000"
+ permissionId="getCustomer"/>
+ </granted>
+</permissions> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/group-create.json b/docs/guide/src/docbkx/samples/group-create.json
new file mode 100644
index 00000000..4f5a15f7
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/group-create.json
@@ -0,0 +1,6 @@
+{"group":
+ {
+ "id" : "Admin",
+ "description" : "A Description of the group..."
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/group-create.xml b/docs/guide/src/docbkx/samples/group-create.xml
new file mode 100644
index 00000000..fbba3c61
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/group-create.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<group xmlns="http://docs.openstack.org/idm/api/v1.0"
+ id="Admin">
+ <description>A Description of the group...</description>
+</group>
diff --git a/docs/guide/src/docbkx/samples/group-updated-nt.json b/docs/guide/src/docbkx/samples/group-updated-nt.json
new file mode 100644
index 00000000..004fa368
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/group-updated-nt.json
@@ -0,0 +1,6 @@
+{"group":
+ {
+ "id" : "Admin",
+ "description" : "A New description of the group..."
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/group-updated-nt.xml b/docs/guide/src/docbkx/samples/group-updated-nt.xml
new file mode 100644
index 00000000..1e10d24a
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/group-updated-nt.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<group xmlns="http://docs.openstack.org/idm/api/v1.0"
+ id="Admin">
+ <description>A New description of the group...</description>
+</group>
diff --git a/docs/guide/src/docbkx/samples/group-updated.json b/docs/guide/src/docbkx/samples/group-updated.json
new file mode 100644
index 00000000..da20dac5
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/group-updated.json
@@ -0,0 +1,7 @@
+{"group":
+ {
+ "tenantId" : "1234",
+ "id" : "Admin",
+ "description" : "A New description of the group..."
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/group-updated.xml b/docs/guide/src/docbkx/samples/group-updated.xml
new file mode 100644
index 00000000..991a6b1e
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/group-updated.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<group xmlns="http://docs.openstack.org/idm/api/v1.0"
+ tenantId="1234" id="Admin">
+ <description>A New description of the group...</description>
+</group>
diff --git a/docs/guide/src/docbkx/samples/group.json b/docs/guide/src/docbkx/samples/group.json
new file mode 100644
index 00000000..22efc41f
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/group.json
@@ -0,0 +1,7 @@
+{"group":
+ {
+ "tenantId" : "1234",
+ "id" : "Admin",
+ "description" : "A Description of the group..."
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/group.xml b/docs/guide/src/docbkx/samples/group.xml
new file mode 100644
index 00000000..ba3063ae
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/group.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<group xmlns="http://docs.openstack.org/idm/api/v1.0"
+ tenantId="1234" id="Admin">
+ <description>A Description of the group...</description>
+</group>
diff --git a/docs/guide/src/docbkx/samples/groups-nt.json b/docs/guide/src/docbkx/samples/groups-nt.json
new file mode 100644
index 00000000..b183edac
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/groups-nt.json
@@ -0,0 +1,12 @@
+{"groups": {
+ "values" : [
+ {
+ "id" : "Admin",
+ "description" : "A description ..."
+ },
+ {
+ "id" : "Technical",
+ "description" : "Another description ..."
+ }]
+}
+}
diff --git a/docs/guide/src/docbkx/samples/groups-nt.xml b/docs/guide/src/docbkx/samples/groups-nt.xml
new file mode 100644
index 00000000..7dd515aa
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/groups-nt.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<groups xmlns="http://docs.openstack.org/idm/api/v1.0">
+ <group id="Admin">
+ <description>A Description of the group...</description>
+ </group>
+ <group id="Technical">
+ <description>Another description...</description>
+ </group>
+</groups>
diff --git a/docs/guide/src/docbkx/samples/groups.json b/docs/guide/src/docbkx/samples/groups.json
new file mode 100644
index 00000000..1c6f6c03
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/groups.json
@@ -0,0 +1,15 @@
+{"groups": {
+ "values" : [
+ {
+ "tenantId" : "1234",
+ "id" : "Admin",
+ "description" : "A description ..."
+ },
+ {
+ "tenantId" : "1234",
+ "id" : "Technical",
+ "description" : "Another description ..."
+ }
+ ]
+}
+}
diff --git a/docs/guide/src/docbkx/samples/groups.xml b/docs/guide/src/docbkx/samples/groups.xml
new file mode 100644
index 00000000..3f5ba19a
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/groups.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<groups xmlns="http://docs.openstack.org/idm/api/v1.0">
+ <group tenantId="1234" id="Admin">
+ <description>A Description of the group...</description>
+ </group>
+ <group tenantId="1234" id="Technical">
+ <description>Another description...</description>
+ </group>
+</groups>
diff --git a/docs/guide/src/docbkx/samples/idm_fault.json b/docs/guide/src/docbkx/samples/idm_fault.json
new file mode 100644
index 00000000..84e3908e
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/idm_fault.json
@@ -0,0 +1,7 @@
+{"idmFault":
+ {
+ "message": "Fault",
+ "details": "Error Details...",
+ "code": 500
+ }
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/idm_fault.xml b/docs/guide/src/docbkx/samples/idm_fault.xml
new file mode 100644
index 00000000..e0f695f2
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/idm_fault.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<idmFault xmlns="http://docs.openstack.org/idm/api/v1.0"
+ code="500">
+ <message>Fault</message>
+ <details>Error Details...</details>
+</idmFault>
diff --git a/docs/guide/src/docbkx/samples/item_not_found.json b/docs/guide/src/docbkx/samples/item_not_found.json
new file mode 100644
index 00000000..dda88a59
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/item_not_found.json
@@ -0,0 +1,7 @@
+{"itemNotFound":
+ {
+ "message": "Item not found.",
+ "details": "Error Details...",
+ "code": 404
+ }
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/item_not_found.xml b/docs/guide/src/docbkx/samples/item_not_found.xml
new file mode 100644
index 00000000..f967b76a
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/item_not_found.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<itemNotFound xmlns="http://docs.openstack.org/idm/api/v1.0"
+ code="404">
+ <message>Item not found.</message>
+ <details>Error Details...</details>
+</itemNotFound>
diff --git a/docs/guide/src/docbkx/samples/methodnotallowedfault.json b/docs/guide/src/docbkx/samples/methodnotallowedfault.json
new file mode 100644
index 00000000..ad9cec4b
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/methodnotallowedfault.json
@@ -0,0 +1,5 @@
+{
+ "message": "Method Not Allowed",
+ "details": "Error Details...",
+ "code": 405
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/methodnotallowedfault.xml b/docs/guide/src/docbkx/samples/methodnotallowedfault.xml
new file mode 100644
index 00000000..01068572
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/methodnotallowedfault.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<methodNotAllowed xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ code="405">
+ <message>Method Not Allowed</message>
+ <details>Error Details...</details>
+</methodNotAllowed> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/missing_username.json b/docs/guide/src/docbkx/samples/missing_username.json
new file mode 100644
index 00000000..a257f72e
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/missing_username.json
@@ -0,0 +1,5 @@
+{
+ "message": "What username?",
+ "details": "Error Details...",
+ "code": 400
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/missing_username.xml b/docs/guide/src/docbkx/samples/missing_username.xml
new file mode 100644
index 00000000..9d1330fc
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/missing_username.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<missingUsername xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ code="400">
+ <message>What username?</message>
+ <details>Error Details...</details>
+</missingUsername> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/mosso-id-authentication-response.json b/docs/guide/src/docbkx/samples/mosso-id-authentication-response.json
new file mode 100644
index 00000000..e071f01c
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/mosso-id-authentication-response.json
@@ -0,0 +1,4 @@
+{"token": {
+ "id": "DFW-c6dfc4456f6545f8b8265ff5b6bda775",
+ "expires_in": 16110
+}}
diff --git a/docs/guide/src/docbkx/samples/mosso-id-authentication-response.xml b/docs/guide/src/docbkx/samples/mosso-id-authentication-response.xml
new file mode 100644
index 00000000..6bce8a03
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/mosso-id-authentication-response.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<cloudAuth xmlns="http://docs.rackspacecloud.com/idm/api/v1.0">
+ <token id="DFW-c6dfc4456f6545f8b8265ff5b6bda775"
+ expires_in="16640"/>
+ <serviceCatalog xmlns="http://docs.rackspacecloud.com/idm/api/v1.0">
+ <service name="cloudFiles">
+ <endpoint region="DFW"
+ v1Default="true"
+ publicURL="https://storage.clouddrive.com/v1/KovacsNastId"
+ internalURL="https://storage-snet.clouddrive.com/v1/KovacsNastId"/>
+ </service>
+ <service name="cloudServers">
+ <endpoint v1Default="false"
+ publicURL="https://servers.api.rackspacecloud.com/v1.0/90000"/>
+ </service>
+ </serviceCatalog>
+</cloudAuth> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/mossoCredentials.xml b/docs/guide/src/docbkx/samples/mossoCredentials.xml
new file mode 100644
index 00000000..17352331
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/mossoCredentials.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<mossoCredentials xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ mossoId="999112358"
+ key="qauser-000-001" />
diff --git a/docs/guide/src/docbkx/samples/nastCredentials.xml b/docs/guide/src/docbkx/samples/nastCredentials.xml
new file mode 100644
index 00000000..b478c3e6
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/nastCredentials.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<nastCredentials xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ nastId="nastid-qauser"
+ key="qauser-000-001" />
diff --git a/docs/guide/src/docbkx/samples/password_recovery.json b/docs/guide/src/docbkx/samples/password_recovery.json
new file mode 100644
index 00000000..4650969a
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/password_recovery.json
@@ -0,0 +1,15 @@
+{
+ "customParams": {
+ "param": [
+ {
+ "name": "FirstName",
+ "value": "Steve"
+ }
+ ]
+ },
+ "callbackUrl": "http://www.someurl.com",
+ "templateUrl": "http://www.someurl.com",
+ "from": "email@email.com",
+ "replyTo": "replay@email.com",
+ "subject": "Password Recovery"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/password_recovery.xml b/docs/guide/src/docbkx/samples/password_recovery.xml
new file mode 100644
index 00000000..d13922e7
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/password_recovery.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<passwordRecovery xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ subject="Password Recovery"
+ replyTo="replay@email.com"
+ from="email@email.com"
+ templateUrl="http://www.someurl.com"
+ callbackUrl="http://www.someurl.com">
+ <customParams>
+ <params value="Steve" name="FirstName" />
+ </customParams>
+</passwordRecovery> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/password_rule.json b/docs/guide/src/docbkx/samples/password_rule.json
new file mode 100644
index 00000000..fe03ec4a
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/password_rule.json
@@ -0,0 +1,5 @@
+{
+ "id": 1,
+ "name": "Mininum Legth",
+ "message": "Password must be at least 7 characters long."
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/password_rule.xml b/docs/guide/src/docbkx/samples/password_rule.xml
new file mode 100644
index 00000000..78038228
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/password_rule.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<passwordRule xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ message="Password must be at least 7 characters long."
+ name="Mininum Legth"
+ id="1" /> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/password_rule_result.json b/docs/guide/src/docbkx/samples/password_rule_result.json
new file mode 100644
index 00000000..1c538dce
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/password_rule_result.json
@@ -0,0 +1,6 @@
+{
+ "passed": true,
+ "ruleId": 1,
+ "ruleName": "Minimum Length",
+ "ruleMessage": "Password must be at least 7 characters long."
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/password_rule_result.xml b/docs/guide/src/docbkx/samples/password_rule_result.xml
new file mode 100644
index 00000000..3e17ddab
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/password_rule_result.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<passwordRuleResult xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ ruleMessage="Password must be at least 7 characters long."
+ ruleName="Minimum Length"
+ ruleId="1"
+ passed="true" /> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/password_rule_results.json b/docs/guide/src/docbkx/samples/password_rule_results.json
new file mode 100644
index 00000000..4a811cf4
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/password_rule_results.json
@@ -0,0 +1,16 @@
+{
+ "passwordRuleResult": [
+ {
+ "passed": true,
+ "ruleId": 1,
+ "ruleName": "Minimum Length",
+ "ruleMessage": "Password must be at least 7 characters long."
+ },
+ {
+ "passed": true,
+ "ruleId": 2,
+ "ruleName": "Lowercase Character",
+ "ruleMessage": "Password must contain a lowercase character."
+ }
+ ]
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/password_rule_results.xml b/docs/guide/src/docbkx/samples/password_rule_results.xml
new file mode 100644
index 00000000..8a48eb70
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/password_rule_results.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<passwordRuleResults
+ xmlns="http://docs.rackspacecloud.com/idm/api/v1.0">
+ <passwordRuleResults
+ ruleMessage="Password must be at least 7 characters."
+ ruleName="Minimum Length"
+ ruleId="1"
+ passed="true" />
+ <passwordRuleResults
+ ruleMessage="Password must contain a lowercase."
+ ruleName="Lowercase Character"
+ ruleId="2"
+ passed="true" />
+</passwordRuleResults> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/password_rules.json b/docs/guide/src/docbkx/samples/password_rules.json
new file mode 100644
index 00000000..d65c3f9f
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/password_rules.json
@@ -0,0 +1,14 @@
+{
+ "passwordRule": [
+ {
+ "id": 1,
+ "name": "Mininum Legth",
+ "message": "Password must be at least 7 characters long."
+ },
+ {
+ "id": 2,
+ "name": "Lowercase Character",
+ "message": "Password must contain a lowercase character."
+ }
+ ]
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/password_rules.xml b/docs/guide/src/docbkx/samples/password_rules.xml
new file mode 100644
index 00000000..e6375876
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/password_rules.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<passwordRules
+ xmlns="http://docs.rackspacecloud.com/idm/api/v1.0">
+ <passwordRule
+ message="Password must be at least 7 characters."
+ name="Mininum Legth"
+ id="1" />
+ <passwordRule
+ message="Password must contain a lowercase."
+ name="Lowercase Character"
+ id="2" />
+</passwordRules> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/password_validation.json b/docs/guide/src/docbkx/samples/password_validation.json
new file mode 100644
index 00000000..3d4d86be
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/password_validation.json
@@ -0,0 +1,17 @@
+{"passwordRuleResults":{
+ "passwordRuleResults":[
+ {
+ "passed":true,
+ "ruleId":1,"ruleName":
+ "Mininumn Length",
+ "ruleMessage":"The password must be at least 7 characters long"
+ },
+ {
+ "passed":false,
+ "ruleId":2,"ruleName":
+ "Uppercase Rule","ruleMessage":
+ "The password must contain an uppercase charater"
+ }
+ ]},
+ "validPassword":false
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/password_validation.xml b/docs/guide/src/docbkx/samples/password_validation.xml
new file mode 100644
index 00000000..a7619130
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/password_validation.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<passwordValidation xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ validPassword="true">
+ <passwordRuleResults>
+ <passwordRuleResults
+ ruleMessage="Password must be at least 7 characters long."
+ ruleName="Minimum Length"
+ ruleId="1"
+ passed="true" />
+ <passwordRuleResults
+ ruleMessage="Password must contain a lowercase character."
+ ruleName="Lowercase Character"
+ ruleId="2"
+ passed="true" />
+ </passwordRuleResults>
+</passwordValidation> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/passwordrotation.json b/docs/guide/src/docbkx/samples/passwordrotation.json
new file mode 100644
index 00000000..828289bb
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/passwordrotation.json
@@ -0,0 +1,4 @@
+{
+ "enabled": true,
+ "duration": "60"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/passwordrotation.xml b/docs/guide/src/docbkx/samples/passwordrotation.xml
new file mode 100644
index 00000000..d4316dc4
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/passwordrotation.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<passwordRotationPolicy xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ enabled="true"
+ duration="90"
+</passwordRotationPolicy> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/passwordvalidationfault.json b/docs/guide/src/docbkx/samples/passwordvalidationfault.json
new file mode 100644
index 00000000..29b70594
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/passwordvalidationfault.json
@@ -0,0 +1,5 @@
+{
+ "message": "Password Failed Validation",
+ "details": "Error Details...",
+ "code": 409
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/passwordvalidationfault.xml b/docs/guide/src/docbkx/samples/passwordvalidationfault.xml
new file mode 100644
index 00000000..efe6c3e8
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/passwordvalidationfault.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<passwordValidationFault xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ code="409">
+ <message>Password Failed Validation</message>
+ <details>Error Details...</details>
+</passwordValidationFault> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/permission.json b/docs/guide/src/docbkx/samples/permission.json
new file mode 100644
index 00000000..cb7b261c
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/permission.json
@@ -0,0 +1,7 @@
+{
+ "value": "POST /customers",
+ "permissionId": "addCustomer",
+ "customerId": "RCN-000-000-000",
+ "clientId": "IDM",
+ "type": "application/text"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/permission.xml b/docs/guide/src/docbkx/samples/permission.xml
new file mode 100644
index 00000000..d8157aa1
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/permission.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<permission xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ type="application/text"
+ clientId="IDM"
+ customerId="RCN-000-000-000"
+ permissionId="addCustomer">POST /customers</permission> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/permissions.json b/docs/guide/src/docbkx/samples/permissions.json
new file mode 100644
index 00000000..aef0cd9d
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/permissions.json
@@ -0,0 +1,30 @@
+{
+ "granted": {
+ "permission": [
+ {
+ "permissionId": "addCustomer",
+ "customerId": "RCN-000-000-000",
+ "clientId": "IDM"
+ },
+ {
+ "permissionId": "getCustomer",
+ "customerId": "RCN-000-000-000",
+ "clientId": "IDM"
+ }
+ ]
+ },
+ "defined": {
+ "permission": [
+ {
+ "permissionId": "addCustomer",
+ "customerId": "RCN-000-000-000",
+ "clientId": "IDM"
+ },
+ {
+ "permissionId": "getCustomer",
+ "customerId": "RCN-000-000-000",
+ "clientId": "IDM"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/permissions.xml b/docs/guide/src/docbkx/samples/permissions.xml
new file mode 100644
index 00000000..84c2de60
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/permissions.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<permissions xmlns="http://docs.rackspacecloud.com/idm/api/v1.0">
+ <granted>
+ <permission
+ clientId="IDM"
+ customerId="RCN-000-000-000"
+ permissionId="addCustomer"/>
+ <permission
+ clientId="IDM"
+ customerId="RCN-000-000-000"
+ permissionId="getCustomer"/>
+ </granted>
+ <defined>
+ <permission
+ clientId="IDM"
+ customerId="RCN-000-000-000"
+ permissionId="addCustomer"/>
+ <permission
+ clientId="IDM"
+ customerId="RCN-000-000-000"
+ permissionId="getCustomer"/>
+ </defined>
+</permissions> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/reset_user_password.json b/docs/guide/src/docbkx/samples/reset_user_password.json
new file mode 100644
index 00000000..38cb9e1f
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/reset_user_password.json
@@ -0,0 +1,3 @@
+{
+ "password": "7ud$dnF"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/reset_user_password.xml b/docs/guide/src/docbkx/samples/reset_user_password.xml
new file mode 100644
index 00000000..187b9122
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/reset_user_password.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<userPassword xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ password="7ud$dnF" /> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/resourceId_conflict.json b/docs/guide/src/docbkx/samples/resourceId_conflict.json
new file mode 100644
index 00000000..7eaf859b
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/resourceId_conflict.json
@@ -0,0 +1,5 @@
+{
+ "message": "ResourceId already taken.",
+ "details": "Error Details...",
+ "code": 409
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/resourceId_conflict.xml b/docs/guide/src/docbkx/samples/resourceId_conflict.xml
new file mode 100644
index 00000000..1710f51c
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/resourceId_conflict.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<resourceIdConflict xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ code="409">
+ <message>ResourceId already taken.</message>
+ <details>Error Details...</details>
+</resourceIdConflict> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/role.json b/docs/guide/src/docbkx/samples/role.json
new file mode 100644
index 00000000..bc4bb59d
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/role.json
@@ -0,0 +1,4 @@
+{
+ "name": "Admin",
+ "type": "RackspaceDefined"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/role.xml b/docs/guide/src/docbkx/samples/role.xml
new file mode 100644
index 00000000..3c91848d
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/role.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<role type="RackspaceDefined"
+ name="Admin" /> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/roles.json b/docs/guide/src/docbkx/samples/roles.json
new file mode 100644
index 00000000..465f36b1
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/roles.json
@@ -0,0 +1,12 @@
+{
+ "role": [
+ {
+ "name": "Admin",
+ "type": "RackspaceDefined"
+ },
+ {
+ "name": "HR",
+ "type": "CustomerDefined"
+ }
+ ]
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/roles.xml b/docs/guide/src/docbkx/samples/roles.xml
new file mode 100644
index 00000000..e8b57c0a
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/roles.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<roles xmlns="http://docs.rackspacecloud.com/idm/api/v1.0">
+ <role type="RackspaceDefined"
+ name="Admin" />
+ <role type="CustomerDefined"
+ name="HR" />
+</roles> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/samplerequestheader.json b/docs/guide/src/docbkx/samples/samplerequestheader.json
new file mode 100644
index 00000000..a4647076
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/samplerequestheader.json
@@ -0,0 +1,4 @@
+POST /v1.0/token HTTP/1.1
+Host: idm.api.rackspace.com
+Content-Type: application/json
+Accept: application/xml \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/sampleresponseheader.json b/docs/guide/src/docbkx/samples/sampleresponseheader.json
new file mode 100644
index 00000000..0b08f684
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/sampleresponseheader.json
@@ -0,0 +1,5 @@
+HTTP/1.1 200 OKAY
+Date: Mon, 12 Nov 2010 15:55:01 GMT
+Server: Apache
+Content-Length:
+Content-Type: application/xml; charset=UTF-8 \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/service-catalog-response.json b/docs/guide/src/docbkx/samples/service-catalog-response.json
new file mode 100644
index 00000000..6e6f6533
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/service-catalog-response.json
@@ -0,0 +1,22 @@
+{"service": [
+ {
+ "endpoint": [ {
+ "region": "DFW",
+ "v1Default": true,
+ "publicURL": "https://storage.clouddrive.com/v1/KovacsNastId",
+ "internalURL": "https://storage-snet.clouddrive.com/v1/KovacsNastId",
+ "adminURL": null
+ }],
+ "name": "cloudFiles"
+ },
+ {
+ "endpoint": [ {
+ "region": null,
+ "v1Default": false,
+ "publicURL": "https://servers.api.rackspacecloud.com/v1.0/90000",
+ "internalURL": null,
+ "adminURL": null
+ }],
+ "name": "cloudServers"
+ }
+]}
diff --git a/docs/guide/src/docbkx/samples/service-catalog-response.xml b/docs/guide/src/docbkx/samples/service-catalog-response.xml
new file mode 100644
index 00000000..0cdb9222
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/service-catalog-response.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<serviceCatalog xmlns="http://docs.rackspacecloud.com/idm/api/v1.0">
+ <service name="cloudFiles">
+ <endpoint region="DFW"
+ v1Default="true"
+ publicURL="https://storage.clouddrive.com/v1/KovacsNastId"
+ internalURL="https://storage-snet.clouddrive.com/v1/KovacsNastId"/>
+ </service>
+ <service name="cloudServers">
+ <endpoint v1Default="false"
+ publicURL="https://servers.api.rackspacecloud.com/v1.0/90000"/>
+ </service>
+</serviceCatalog>
diff --git a/docs/guide/src/docbkx/samples/tenants-1.json b/docs/guide/src/docbkx/samples/tenants-1.json
new file mode 100644
index 00000000..6f45f1c8
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/tenants-1.json
@@ -0,0 +1,16 @@
+{
+"tenants": {
+ "values" : [
+ {
+ "id": "1234",
+ "description": "A description ...",
+ "enabled": true
+ }
+ ],
+ "links" : [
+ {
+ "rel" : "next",
+ "href" : "http://idm.api.openstack.org/v1.0/1234/tenants?limit=1&marker=1234"
+ }
+ ]
+}
diff --git a/docs/guide/src/docbkx/samples/tenants-1.xml b/docs/guide/src/docbkx/samples/tenants-1.xml
new file mode 100644
index 00000000..67101816
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/tenants-1.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tenants xmlns="http://docs.openstack.org/idm/api/v1.0"
+ xmlns:atom="http://www.w3.org/2005/Atom">
+ <tenant enabled="true" id="1234">
+ <description>A description...</description>
+ </tenant>
+ <atom:link
+ rel="next"
+ href="http://idm.api.openstack.org/v1.0/1234/tenants?limit=1&amp;marker=1234"/>
+</tenants>
diff --git a/docs/guide/src/docbkx/samples/tenants-2.json b/docs/guide/src/docbkx/samples/tenants-2.json
new file mode 100644
index 00000000..7cb3ca6b
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/tenants-2.json
@@ -0,0 +1,20 @@
+{
+"tenants": {
+ "values" : [
+ {
+ "id": "3645",
+ "description": "A description ...",
+ "enabled": true
+ }
+ ],
+ "links" : [
+ {
+ "rel" : "next",
+ "href" : "http://idm.api.openstack.org/v1.0/1234/tenants?limit=1&marker=3645"
+ },
+ {
+ "rel" : "previous",
+ "href" : "http://idm.api.openstack.org/v1.0/1234/tenants?limit=1"
+ }
+ ]
+}
diff --git a/docs/guide/src/docbkx/samples/tenants-2.xml b/docs/guide/src/docbkx/samples/tenants-2.xml
new file mode 100644
index 00000000..7be4f537
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/tenants-2.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tenants xmlns="http://docs.openstack.org/idm/api/v1.0"
+ xmlns:atom="http://www.w3.org/2005/Atom">
+ <tenant enabled="true" id="3645">
+ <description>A description...</description>
+ </tenant>
+ <atom:link
+ rel="previous"
+ href="http://idm.api.openstack.org/v1.0/1234/tenants?limit=1"/>
+ <atom:link
+ rel="next"
+ href="http://idm.api.openstack.org/v1.0/1234/tenants?limit=1&amp;marker=3645"/>
+</tenants>
diff --git a/docs/guide/src/docbkx/samples/tenants-3.json b/docs/guide/src/docbkx/samples/tenants-3.json
new file mode 100644
index 00000000..febcf225
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/tenants-3.json
@@ -0,0 +1,16 @@
+{
+"tenants": {
+ "values" : [
+ {
+ "id": "9999",
+ "description": "A description ...",
+ "enabled": true
+ }
+ ],
+ "links" : [
+ {
+ "rel" : "previous",
+ "href" : "http://idm.api.openstack.org/v1.0/1234/tenants?limit=1&marker=1234"
+ }
+ ]
+}
diff --git a/docs/guide/src/docbkx/samples/tenants-3.xml b/docs/guide/src/docbkx/samples/tenants-3.xml
new file mode 100644
index 00000000..5e5b49fa
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/tenants-3.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tenants xmlns="http://docs.openstack.org/idm/api/v1.0"
+ xmlns:atom="http://www.w3.org/2005/Atom">
+ <tenant enabled="true" id="9999">
+ <description>A description...</description>
+ </tenant>
+ <atom:link
+ rel="previous"
+ href="http://idm.api.openstack.org/v1.0/1234/tenants?limit=1&amp;marker=1234"/>
+</tenants>
diff --git a/docs/guide/src/docbkx/samples/token.json b/docs/guide/src/docbkx/samples/token.json
new file mode 100644
index 00000000..a25f1530
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/token.json
@@ -0,0 +1,4 @@
+{
+ "id": "309487987f0892397a9439875900b",
+ "expiresIn": 3600
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/token.xml b/docs/guide/src/docbkx/samples/token.xml
new file mode 100644
index 00000000..98b78611
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/token.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<token xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ expires_in="3600"
+ id="309487987f0892397a9439875900b" /> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/unauthorized.json b/docs/guide/src/docbkx/samples/unauthorized.json
new file mode 100644
index 00000000..e969fc0e
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/unauthorized.json
@@ -0,0 +1,5 @@
+{
+ "message": "Oh no you don't.",
+ "details": "Error Details...",
+ "code": 401
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/unauthorized.xml b/docs/guide/src/docbkx/samples/unauthorized.xml
new file mode 100644
index 00000000..6dad6bca
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/unauthorized.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<unauthorized xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ code="401">
+ <message>Oh no you don't.</message>
+ <details>Error Details...</details>
+</unauthorized> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/unavailable.json b/docs/guide/src/docbkx/samples/unavailable.json
new file mode 100644
index 00000000..b91a23e7
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/unavailable.json
@@ -0,0 +1,5 @@
+{
+ "message": "The IdM Service is Unavailable at the moment.",
+ "details": "Error Details...",
+ "code": 503
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/unavailable.xml b/docs/guide/src/docbkx/samples/unavailable.xml
new file mode 100644
index 00000000..ebd9f106
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/unavailable.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<serviceUnavailable xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ code="503">
+ <message>The IdM Service is Unavailable at the moment.</message>
+ <details>Error Details...</details>
+</serviceUnavailable> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/updatedcustomer.json b/docs/guide/src/docbkx/samples/updatedcustomer.json
new file mode 100644
index 00000000..05df6a3a
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/updatedcustomer.json
@@ -0,0 +1,7 @@
+{"tenant":
+ {
+ "id": "1234",
+ "description": "A NEW description...",
+ "enabled": true
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/updatedcustomer.xml b/docs/guide/src/docbkx/samples/updatedcustomer.xml
new file mode 100644
index 00000000..8bcce9bf
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/updatedcustomer.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tenant xmlns="http://docs.openstack.org/idm/api/v1.0"
+ enabled="true" id="1234">
+ <description>A NEW description...</description>
+</tenant>
diff --git a/docs/guide/src/docbkx/samples/updateduser.json b/docs/guide/src/docbkx/samples/updateduser.json
new file mode 100644
index 00000000..73a67c6a
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/updateduser.json
@@ -0,0 +1,8 @@
+{"user":
+ {
+ "id": "jqsmith",
+ "tenantId": "1234",
+ "email": "john.smith@somenewemail.org",
+ "enabled": true
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/updateduser.xml b/docs/guide/src/docbkx/samples/updateduser.xml
new file mode 100644
index 00000000..c11bc8fc
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/updateduser.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<user xmlns="http://docs.openstack.org/idm/api/v1.0"
+ email="john.smith@somenewemail.org" tenantId="1234"
+ id="jqsmith" enabled="true"/>
diff --git a/docs/guide/src/docbkx/samples/updateuser.json b/docs/guide/src/docbkx/samples/updateuser.json
new file mode 100644
index 00000000..2e431d9a
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/updateuser.json
@@ -0,0 +1,6 @@
+{"user":
+ {
+ "email": "john.smith@somenewemail.org",
+ "id": "jqsmith"
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/updateuser.xml b/docs/guide/src/docbkx/samples/updateuser.xml
new file mode 100644
index 00000000..7d1988e4
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/updateuser.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<user xmlns="http://docs.openstack.org/idm/api/v1.0"
+ email="john.smith@somenewemail.org" id="jqsmith" />
diff --git a/docs/guide/src/docbkx/samples/user.json b/docs/guide/src/docbkx/samples/user.json
new file mode 100644
index 00000000..1051172c
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/user.json
@@ -0,0 +1,41 @@
+{
+ "secret": {
+ "secretQuestion": "What is the middle name of your best fried, spelled backward?",
+ "secretAnswer": "sicnarF"
+ },
+ "password": {
+ "password": "C@n+f001me!"
+ },
+ "apiKey": {
+ "apiKey": "10388a8497547f8w77e"
+ },
+ "roles": [
+ {
+ "name": "Admin",
+ "type": "RackspaceDefined"
+ }
+ ],
+ "permissions": [
+ {
+ "description": "POST /users",
+ "name": "AddUser"
+ },
+ {}
+ ],
+ "username": "jqsmith",
+ "customerId": "RCN-000-000-000",
+ "customerInum": "@!FFFF.FFFF.FFFF.FFFF!EEEE.EEEE",
+ "email": "john.smith@example.org",
+ "personId": "RPN-111-111-111",
+ "firstName": "John",
+ "middleName": "Quincy",
+ "lastName": "Smith",
+ "displayName": "John Smith",
+ "prefLanguage": "US_en",
+ "inum": "@!FFFF.FFFF.FFFF.FFFF!EEEE.EEEE!1111",
+ "iname": "@Example.Smith*John",
+ "region": "America/Chicago",
+ "status": "ACTIVE",
+ "locked": false,
+ "softDeleted": false
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/user.xml b/docs/guide/src/docbkx/samples/user.xml
new file mode 100644
index 00000000..c252696d
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/user.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<user xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ softDeleted="false" locked="false"
+ status="ACTIVE" timeZone="America/Chicago"
+ region="SAT" iname="@Example.Smith*John"
+ inum="@!FFFF.FFFF.FFFF.FFFF!EEEE.EEEE!1111"
+ prefLanguage="US_en" displayName="John Smith"
+ lastName="Smith" middleName="Quincy"
+ firstName="John" personId="RPN-111-111-111"
+ email="john.smith@example.org"
+ customerInum="@!FFFF.FFFF.FFFF.FFFF!EEEE.EEEE"
+ customerId="RCN-000-000-000"
+ username="jqsmith">
+ <roles>
+ <role type="RackspaceDefined"
+ name="Admin" />
+ </roles>
+</user> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/userGroups.json b/docs/guide/src/docbkx/samples/userGroups.json
new file mode 100644
index 00000000..dc7b3f3b
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/userGroups.json
@@ -0,0 +1,16 @@
+{"groups": {
+ "values" : [
+ {
+ "tenantId" : "1234",
+ "id" : "Admin",
+ },
+ {
+ "tenantId" : "1234",
+ "id" : "Technical",
+ },
+ {
+ "id" : "Customer",
+ }
+ ]
+}
+}
diff --git a/docs/guide/src/docbkx/samples/userGroups.xml b/docs/guide/src/docbkx/samples/userGroups.xml
new file mode 100644
index 00000000..16f73c51
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/userGroups.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<groups xmlns="http://docs.openstack.org/idm/api/v1.0">
+ <group tenantId="1234" id="Admin" />
+ <group tenantId="1234" id="Technical"/>
+ <group id="Customer"/>
+</groups>
diff --git a/docs/guide/src/docbkx/samples/userWithOnlyLock.json b/docs/guide/src/docbkx/samples/userWithOnlyLock.json
new file mode 100644
index 00000000..11d640e6
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/userWithOnlyLock.json
@@ -0,0 +1,5 @@
+{"user":
+ {
+ "enabled": "true"
+ }
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/userWithOnlyLock.xml b/docs/guide/src/docbkx/samples/userWithOnlyLock.xml
new file mode 100644
index 00000000..42eecba2
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/userWithOnlyLock.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<user xmlns="http://docs.openstack.org/idm/api/v1.0"
+ enabled="true"/>
diff --git a/docs/guide/src/docbkx/samples/userWithOnlySoftDeleted.json b/docs/guide/src/docbkx/samples/userWithOnlySoftDeleted.json
new file mode 100644
index 00000000..bc3a14ff
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/userWithOnlySoftDeleted.json
@@ -0,0 +1,3 @@
+{
+ "softDeleted": "true"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/userWithOnlySoftDeleted.xml b/docs/guide/src/docbkx/samples/userWithOnlySoftDeleted.xml
new file mode 100644
index 00000000..6284eb54
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/userWithOnlySoftDeleted.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<user xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ softDeleted="true" /> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/userWithOnlyStatus.json b/docs/guide/src/docbkx/samples/userWithOnlyStatus.json
new file mode 100644
index 00000000..d4bd36c9
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/userWithOnlyStatus.json
@@ -0,0 +1,3 @@
+{
+ "status": "INACTIVE"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/userWithOnlyStatus.xml b/docs/guide/src/docbkx/samples/userWithOnlyStatus.xml
new file mode 100644
index 00000000..30e7b127
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/userWithOnlyStatus.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<user xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ status="ACTIVE" /> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/user_api_key.json b/docs/guide/src/docbkx/samples/user_api_key.json
new file mode 100644
index 00000000..ff5dd33a
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/user_api_key.json
@@ -0,0 +1,5 @@
+{"user":
+ {
+ "password": "P@$$word1"
+ }
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/user_api_key.xml b/docs/guide/src/docbkx/samples/user_api_key.xml
new file mode 100644
index 00000000..24f86935
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/user_api_key.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<user xmlns="http://docs.openstack.org/idm/api/v1.0"
+ password="P@$$word1"/>
diff --git a/docs/guide/src/docbkx/samples/user_credentials.json b/docs/guide/src/docbkx/samples/user_credentials.json
new file mode 100644
index 00000000..dbcb9977
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/user_credentials.json
@@ -0,0 +1,8 @@
+{
+ "newPassword": {
+ "password": "newpassword"
+ },
+ "currentPassword": {
+ "password": "oldpassword"
+ }
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/user_credentials.xml b/docs/guide/src/docbkx/samples/user_credentials.xml
new file mode 100644
index 00000000..56dc2776
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/user_credentials.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<userCredentials xmlns="http://docs.rackspacecloud.com/idm/api/v1.0">
+ <newPassword password="newpassword" />
+ <currentPassword password="oldpassword" />
+</userCredentials> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/user_disabled.json b/docs/guide/src/docbkx/samples/user_disabled.json
new file mode 100644
index 00000000..5eeb83f2
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/user_disabled.json
@@ -0,0 +1,5 @@
+{
+ "message": "The user has been disabled.",
+ "details": "Error Details...",
+ "code": 403
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/user_disabled.xml b/docs/guide/src/docbkx/samples/user_disabled.xml
new file mode 100644
index 00000000..9f6b528e
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/user_disabled.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<userDisabled xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ code="409">
+ <message>The user has been disabled.</message>
+ <details>Error Details...</details>
+</userDisabled>
diff --git a/docs/guide/src/docbkx/samples/user_password.json b/docs/guide/src/docbkx/samples/user_password.json
new file mode 100644
index 00000000..1e1643b9
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/user_password.json
@@ -0,0 +1,3 @@
+{
+ "password": "newpassword"
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/user_password.xml b/docs/guide/src/docbkx/samples/user_password.xml
new file mode 100644
index 00000000..ba8a49cb
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/user_password.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<userPassword xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ password="newpassword" /> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/user_secret.json b/docs/guide/src/docbkx/samples/user_secret.json
new file mode 100644
index 00000000..e0a4a6a8
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/user_secret.json
@@ -0,0 +1,4 @@
+{
+ "secretQuestion": "Is this a secret question?",
+ "secretAnswer": "Not a very good one."
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/user_secret.xml b/docs/guide/src/docbkx/samples/user_secret.xml
new file mode 100644
index 00000000..d1ab5610
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/user_secret.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<userSecret xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ secretAnswer="Not a very good one."
+ secretQuestion="Is this a secret question?" /> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/usernameCredentials.xml b/docs/guide/src/docbkx/samples/usernameCredentials.xml
new file mode 100644
index 00000000..4d03497d
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/usernameCredentials.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<usernameCredentials xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ username="qauser"
+ key="qauser-000-001" />
diff --git a/docs/guide/src/docbkx/samples/username_conflict.json b/docs/guide/src/docbkx/samples/username_conflict.json
new file mode 100644
index 00000000..e30c009d
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/username_conflict.json
@@ -0,0 +1,5 @@
+{
+ "message": "Username already taken.",
+ "details": "Error Details...",
+ "code": 409
+} \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/username_conflict.xml b/docs/guide/src/docbkx/samples/username_conflict.xml
new file mode 100644
index 00000000..a3d3dbbc
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/username_conflict.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<usernameConflict xmlns="http://docs.rackspacecloud.com/idm/api/v1.0"
+ code="409">
+ <message>Username already taken.</message>
+ <details>Error Details...</details>
+</usernameConflict> \ No newline at end of file
diff --git a/docs/guide/src/docbkx/samples/users.json b/docs/guide/src/docbkx/samples/users.json
new file mode 100644
index 00000000..4bac51c9
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/users.json
@@ -0,0 +1,17 @@
+{"users": {
+ "values" : [
+ {
+ "id": "jqsmith",
+ "tenantId": "1234",
+ "email": "john.smith@example.org",
+ "enabled": true
+ },
+ {
+ "id": "jdoe",
+ "tenantId": "1234",
+ "email": "john.doe@example.org",
+ "enabled": true
+ }
+ ]
+}
+}
diff --git a/docs/guide/src/docbkx/samples/users.xml b/docs/guide/src/docbkx/samples/users.xml
new file mode 100644
index 00000000..c30c1550
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/users.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<users xmlns="http://docs.openstack.org/idm/api/v1.0">
+ <user enabled="true" tenantId="1234"
+ email="john.smith@example.org" id="jqsmith"/>
+ <user enabled="true" tenantId="1234"
+ email="john.doe@example.org" id="jdoe"/>
+</users>
diff --git a/docs/guide/src/docbkx/samples/validatetoken.json b/docs/guide/src/docbkx/samples/validatetoken.json
new file mode 100644
index 00000000..c4721873
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/validatetoken.json
@@ -0,0 +1,19 @@
+{
+ "auth" : {
+ "token": {
+ "id": "ab48a9efdfedb23ty3494",
+ "expires": "2010-11-01T03:32:15-05:00"
+ },
+ "user" : {
+ "groups": {
+ "group": [
+ {
+ "tenantId" : "1234",
+ "name": "Admin"
+ }
+ ]},
+ "username": "jqsmith",
+ "tenantId": "1234",
+ }
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/validatetoken.xml b/docs/guide/src/docbkx/samples/validatetoken.xml
new file mode 100644
index 00000000..b091c7af
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/validatetoken.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<auth xmlns="http://docs.openstack.org/idm/api/v1.0">
+ <token expires="2010-11-01T03:32:15-05:00"
+ id="ab48a9efdfedb23ty3494"/>
+ <user tenantId="1245" username="jqsmith">
+ <groups>
+ <group tenantId="1245" name="Admin"/>
+ </groups>
+ </user>
+</auth>
diff --git a/docs/guide/src/docbkx/samples/version-atom.xml b/docs/guide/src/docbkx/samples/version-atom.xml
new file mode 100644
index 00000000..8cf3dc88
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/version-atom.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+ <title type="text">About This Version</title>
+ <updated>2011-01-21T11:33:21-06:00</updated>
+ <id>http://idm.api.openstack.org/v1.0/</id>
+ <author><name>Rackspace</name><uri>http://www.rackspace.com/</uri></author>
+ <link rel="self" href="http://idm.api.openstack.org/v1.0/"/>
+ <entry>
+ <id>http://idm.api.openstack.org/v1.0/</id>
+ <title type="text">Version v1.0</title>
+ <updated>2011-01-21T11:33:21-06:00</updated>
+ <link rel="self" href="http://idm.api.openstack.org/v1.0/"/>
+ <link rel="describedby" type="application/pdf"
+ href="http://docs.rackspacecloud.com/idm/api/v1.0/idm-devguide-20110125.pdf"/>
+ <link rel="describedby" type="application/vnd.sun.wadl+xml"
+ href="http://docs.rackspacecloud.com/idm/api/v1.0/application.wadl"/>
+ <content type="text">Version v1.0 CURRENT (2011-01-21T11:33:21-06:00)</content>
+ </entry>
+</feed>
diff --git a/docs/guide/src/docbkx/samples/version.json b/docs/guide/src/docbkx/samples/version.json
new file mode 100644
index 00000000..74bae5bd
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/version.json
@@ -0,0 +1,33 @@
+{
+ "version" : {
+ "id" : "v1.0",
+ "status" : "CURRENT",
+ "updated" : "2011-01-21T11:33:21-06:00",
+ "links": [
+ {
+ "rel" : "self",
+ "href" : "http://idm.api.openstack.org/v1.0/"
+ },
+ {
+ "rel" : "describedby",
+ "type" : "application/pdf",
+ "href" : "http://docs.rackspacecloud.com/idm/api/v1.0/idm-devguide-20110125.pdf"
+ },
+ {
+ "rel" : "describedby",
+ "type" : "application/vnd.sun.wadl+xml",
+ "href" : "http://docs.rackspacecloud.com/idm/api/v1.0/application.wadl"
+ }
+ ],
+ "media-types": [
+ {
+ "base" : "application/xml",
+ "type" : "application/vnd.openstack.idm-v1.0+xml"
+ },
+ {
+ "base" : "application/json",
+ "type" : "application/vnd.openstack.idm-v1.0+json"
+ }
+ ]
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/version.xml b/docs/guide/src/docbkx/samples/version.xml
new file mode 100644
index 00000000..4f499322
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/version.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<version xmlns="http://docs.openstack.org/common/api/v1.0"
+ xmlns:atom="http://www.w3.org/2005/Atom"
+ id="v1.0" status="CURRENT" updated="2011-01-21T11:33:21-06:00">
+
+ <media-types>
+ <media-type base="application/xml"
+ type="application/vnd.openstack.idm-v1.0+xml"/>
+ <media-type base="application/json"
+ type="application/vnd.openstack.idm-v1.0+json"/>
+ </media-types>
+
+ <atom:link rel="self"
+ href="http://idm.api.openstack.org/v1.0/"/>
+
+ <atom:link rel="describedby"
+ type="application/pdf"
+ href="http://docs.rackspacecloud.com/idm/api/v1.0/idm-devguide-20110125.pdf" />
+
+ <atom:link rel="describedby"
+ type="application/vnd.sun.wadl+xml"
+ href="http://docs.rackspacecloud.com/idm/api/v1.0/application.wadl" />
+</version>
diff --git a/docs/guide/src/docbkx/samples/versions-atom.xml b/docs/guide/src/docbkx/samples/versions-atom.xml
new file mode 100644
index 00000000..e75cf416
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/versions-atom.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+ <title type="text">Available API Versions</title>
+ <updated>2010-12-12T18:30:02.25Z</updated>
+ <id>http://idm.api.openstack.org/</id>
+ <author><name>Rackspace</name><uri>http://www.rackspace.com/</uri></author>
+ <link rel="self" href="http://idm.api.openstack.org/"/>
+ <entry>
+ <id>http://idm.api.openstack.org/v1.1/</id>
+ <title type="text">Version v1.1</title>
+ <updated>2010-12-12T18:30:02.25Z</updated>
+ <link rel="self" href="http://idm.api.openstack.org/v1.1/"/>
+ <content type="text">Version v1.1 CURRENT (2010-12-12T18:30:02.25Z)</content>
+ </entry>
+ <entry>
+ <id>http://idm.api.openstack.org/v1.0/</id>
+ <title type="text">Version v1.0</title>
+ <updated>2009-10-09T11:30:00Z</updated>
+ <link rel="self" href="http://idm.api.openstack.org/v1.0/"/>
+ <content type="text">Version v1.0 DEPRECATED (2009-10-09T11:30:00Z)</content>
+ </entry>
+</feed>
diff --git a/docs/guide/src/docbkx/samples/versions.json b/docs/guide/src/docbkx/samples/versions.json
new file mode 100644
index 00000000..330a26e9
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/versions.json
@@ -0,0 +1,28 @@
+{
+ "versions" : {
+ "values" : [
+ {
+ "id" : "v1.0",
+ "status" : "DEPRECATED",
+ "updated" : "2009-10-09T11:30:00Z",
+ "links": [
+ {
+ "rel" : "self",
+ "href" : "http://idm.api.openstack.org/v1.0/"
+ }
+ ]
+ },
+ {
+ "id" : "v1.1",
+ "status" : "CURRENT",
+ "updated" : "2010-12-12T18:30:02.25Z",
+ "links": [
+ {
+ "rel" : "self",
+ "href" : "http://idm.api.openstack.org/v1.1/"
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/docs/guide/src/docbkx/samples/versions.xml b/docs/guide/src/docbkx/samples/versions.xml
new file mode 100644
index 00000000..7c3b1535
--- /dev/null
+++ b/docs/guide/src/docbkx/samples/versions.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<versions xmlns="http://docs.openstack.org/common/api/v1.0"
+ xmlns:atom="http://www.w3.org/2005/Atom">
+
+ <version id="v1.0" status="DEPRECATED"
+ updated="2009-10-09T11:30:00Z">
+ <atom:link rel="self"
+ href="http://idm.api.openstack.org/v1.0/"/>
+ </version>
+
+ <version id="v1.1" status="CURRENT"
+ updated="2010-12-12T18:30:02.25Z">
+ <atom:link rel="self"
+ href="http://idm.api.openstack.org/v1.1/"/>
+ </version>
+
+</versions>