incubator-deltacloud-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mar...@redhat.com
Subject =?UFT-8?q?=5BPATCH=201/3=5D=20Updates=20REST=20API=20clarify=20use=20of=20application/x-www-form-urlencoded=20OR=20multipart/form-data=20for=20POST=20ops?=
Date Fri, 09 Sep 2011 11:28:11 GMT
From: marios <marios@redhat.com>


Signed-off-by: marios <marios@redhat.com>
---
 site/content/api.mdown |  643 ++++++++++++++++++++++--------------------------
 site/output/api.html   |  462 ++++++++++++++++++++--------------
 2 files changed, 564 insertions(+), 541 deletions(-)

diff --git a/site/content/api.mdown b/site/content/api.mdown
index 757332f..eb0114e 100644
--- a/site/content/api.mdown
+++ b/site/content/api.mdown
@@ -67,14 +67,14 @@ These represent credentials used to access a running Instance. These can be of t
 *key* (e.g., an *RSA* key), or of type *password* (i.e., with *username* and
 *password* attributes).
 
-##### Storage_Volume
+##### Storage\_Volume
 
 This is a virtual storage device that can be attached to an Instance and mounted
 by the OS therein.
 
-##### Storage_Snapshot
+##### Storage\_Snapshot
 
-These are copies, snapshots of a Storage_Volume at a specified point in time.
+These are copies, snapshots of a Storage\_Volume at a specified point in time.
 
 ##### Bucket
 
@@ -128,6 +128,7 @@ Storage Snapshots, Blob Storage.
 <br/>
 * * *
 
+<a name=authentication>.
 ### 1.3 Authentication
 
 The Deltacloud API server is stateless, and does not keep any information
@@ -138,7 +139,8 @@ and clients have to send the username/password for the backend cloud on every re
 The specifics of what needs to be sent varies from cloud to cloud; some
 cloud providers employ a username and password for API access, whilst
 others use special-purpose API keys. A list of the credentials that a given
-cloud provider expects for API access is [available here](documentation.html)
+cloud provider expects for API access is
+[available here](drivers.html#credentials)
 
 <br/>
 [Contents](#toc)
@@ -222,7 +224,8 @@ part of this specification, and may change in an incompatible way.
 
 Any part of the official API can be reached through the main entry point,
 by default http://localhost:3001/api. The entry point list the resources
-the server knows about for the current cloud provider; for the Amazon EC2 driver for example, these are:
+the server knows about for the current cloud provider; for the Amazon EC2
+driver for example, these are:
 
 * Instances
 * Instance states
@@ -398,8 +401,8 @@ In some cases, a ***realm*** may represent different datacenters, different cont
 or different pools of resources within a single datacenter. A cloud provider may
 insist that resources must all exist within a single ***realm*** in order to cooperate.
 For instance, storage volumes may only be allowed to be mounted to instances within
-the same ***realm***. Generally speaking, going from one ***realm*** to another within the same
-cloud may change many aspects of the cloud, such as SLA’s, pricing terms, etc.
+the same ***realm***. Generally speaking, going from one ***realm*** to another within
+the same cloud may change many aspects of the cloud, such as SLA’s, pricing terms, etc.
 
 #### `GET /api/realms`
 
@@ -443,10 +446,10 @@ to EC2 "availability zones":
 
 #### `GET /api/realms/:id`
 
-Provide the details of a ***realm***. Currently, these are a ***name***, a  ***state*** and a
- ***limit** applicable to the current requester. The ***name*** is an arbitrary label
-with no specific meaning in the API. The ***state*** can be either ***AVAILABLE***
- or ***UNAVAILABLE***. The example below shows the ***realm*** for the Rackspace driver.
+Provide the details of a ***realm***. Currently, these are a **name**, a  **state** and a
+ **limit** applicable to the current requester. The ***name*** is an arbitrary label
+with no specific meaning in the API. The **state** can be either **AVAILABLE**
+ or **UNAVAILABLE**. The example below shows the ***realm*** for the Rackspace driver.
 Since Rackspace does not currently have a notion of ***realms*** the Deltacloud
 Rackspace driver provides a single ***realm*** called 'US', signifying that all
 compute resources for that cloud provider are hosted in the United States:
@@ -668,6 +671,7 @@ whereas Rackspace Cloudservers ***image*** state can be one of *UNKNOWN*, *PREPA
 attribute that specifies the URI to which a client may issue a **HTTP POST** for creation of
 an ***instance*** from the given ***image***.
 
+<a name=list_images>.
 #### `GET /api/images`
 
 Return a list of all ***images*** available in the back-end cloud. By default this call will
@@ -787,12 +791,13 @@ the new image. For example:
     ...
 
 To create a new ***image*** the client must specify the *instance_id* of the running instance.
- Optionally, the client may also provide a *name* and a *description*. The parameters are
-specified as multipart/form-data fields in the client POST. The Deltacloud server will
-respond to a successful operation with **HTTP 201 Created** and provide details of the
-newly created ***image***:
-
+ Optionally, the client may also provide a *name* and a *description*. The parameters may
+be specified as multipart/form-data fields in the client POST.
 
+Alternatively, clients may also specify parameters using a content-type of
+application/x-www-form-urlencoded. The Deltacloud server will respond to a
+successful operation with **HTTP 201 Created** and provide details of the
+newly created ***image***:
 
 `Example request:`
 
@@ -801,24 +806,11 @@ newly created ***image***:
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3002
     Accept: */*
-    Content-Length: 404
-    Expect: 100-continue
-    Content-Type: multipart/form-data; boundary=----------------------------ba9acb193034
-
-    ------------------------------ba9acb193034
-    Content-Disposition: form-data; name="instance_id"
-
-    20109341
-    ------------------------------ba9acb193034
-    Content-Disposition: form-data; name="name"
-
-    customisedserver
-    ------------------------------ba9acb193034
-    Content-Disposition: form-data; name="description"
-
-    jsmith customised web server July 21 2011
-    ------------------------------ba9acb193034--
+    Content-Length: 96
+    Content-Type: application/x-www-form-urlencoded
 
+    instance_id=20109341&name=customisedserver&description=jsmith%20cu
+    stomised%20web%20server%20July%2021%202011
 
 `Server response:`
 
@@ -1355,22 +1347,28 @@ IP address. This access may be given using the [firewalls](#firewalls) collectio
 <a name=create_instance>.
 #### `POST /api/instances`
 
-Create a new ***instance***. At a minimum clients must specify the ***image*** from
-which the virtual machine ***instance*** is to be created. Optionally a client
-may also specify a ***hardware profile*** and ***realm*** (with default values used
-otherwise). Clients can also provide a *name* for the new *instance* though this is not
-supported by all back-end cloud providers. Whether a given feature is available is advertised
-in the response to the Deltacloud server API entry point.
-The details of the new ***instance*** are returned in response to this operation.
-
-For creation of an ***instance*** in the Amazon EC2 cloud a client can also specify the
-name of the EC2 keypair to be used as well as the firewalls (EC2 security groups) that the
-***instance*** should be launched into. The EC2 keypair is specified with the parameter *keyname*
-while firewalls are specified sequentially as *firewalls1* ... *firewalls2* ... etc. These parameters
-are specified in the first ***instance*** creation example below. Note that the values for
-public and private addresses are blank in the server response, as these have not yet been
-assigned by the cloud provider. Subsequent requests for the ***instance*** details
-will provide these values.
+Create a new ***instance***. At a minimum clients must specify the ***image***
+from which the virtual machine ***instance*** is to be created. Optionally a
+client may also specify a ***hardware profile*** and ***realm*** (with default
+values used otherwise). Clients can also provide a *name* for the new *instance*
+ though this is not supported by all back-end cloud providers. Whether a given
+feature is available is advertised in the response to the Deltacloud server
+API entry point. The details of the new ***instance*** are returned in
+response to this operation.
+
+For creation of an ***instance*** in the Amazon EC2 cloud a client can also
+specify the name of the EC2 keypair to be used as well as the firewalls
+(EC2 security groups) that the ***instance*** should be launched into. The
+EC2 keypair is specified with the parameter *keyname* while firewalls are
+specified sequentially as *firewalls1* ... *firewalls2* ... etc. These parameters
+are specified in the first ***instance*** creation example below. Note that the
+values for public and private addresses are blank in the server response, as
+these have not yet been assigned by the cloud provider. Subsequent requests
+for the ***instance*** details will provide these values.
+
+As with other POST operations in the Deltacloud API, clients may specify parameters
+as multipart/form-data or as  x-www-url-form-urlencoded content type, as demonstrated
+by the examples below.
 
 <a name=create_instance_ec2>.
 
@@ -1381,35 +1379,11 @@ will provide these values.
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
-    Content-Length: 676
-    Expect: 100-continue
-    Content-Type: multipart/form-data; boundary=----------------------------cce0758d1679
-
-    ------------------------------cce0758d1679
-    Content-Disposition: form-data; name="keyname"
-
-    eftah
-    ------------------------------cce0758d1679
-    Content-Disposition: form-data; name="image_id"
-
-    ami-f51aff9c
-    ------------------------------cce0758d1679
-    Content-Disposition: form-data; name="realm_id"
-
-    us-east-1c
-    ------------------------------cce0758d1679
-    Content-Disposition: form-data; name="hwp_id"
-
-    c1.medium
-    ------------------------------cce0758d1679
-    Content-Disposition: form-data; name="firewalls1"
+    Content-Length: 107
+    Content-Type: application/x-www-form-urlencoded
 
-    default
-    ------------------------------cce0758d1679
-    Content-Disposition: form-data; name="firewalls2"
-
-    test
-    ------------------------------cce0758d1679--
+    keyname=eftah&image_id=ami-f51aff9c&realm_id=us-east-1c&hwp_id=c1.medium&
+    firewalls1=default&firewalls2=test
 
 `Server response:`
 
@@ -1444,11 +1418,14 @@ will provide these values.
       </authentication>
     </instance>
 
+<a name=create_instance_rax>.
+
 The second example given below shows creation of an ***instance*** in the Rackspace
 Cloudservers cloud. Here you can see that the client provides the optional *name*
  parameter and that the created instance uses authentication of type **password**.
-The *username* and *password* are returned with the details of the newly created
-***instance***:
+Furthermore, in this example the requesting client uses a content-type of
+application/x-www-form-urlencoded. The *username* and *password* are returned with
+the details of the newly created ***instance***:
 
 `Example request: (Rackspace Cloudservers)`
 
@@ -1457,23 +1434,10 @@ The *username* and *password* are returned with the details of the newly created
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3002
     Accept: */*
-    Content-Length: 342
-    Expect: 100-continue
-    Content-Type: multipart/form-data; boundary=----------------------------7424b11a955d
-
-    ------------------------------7424b11a955d
-    Content-Disposition: form-data; name="image_id"
+    Content-Length: 34
+    Content-Type: application/x-www-form-urlencoded
 
-    53
-    ------------------------------7424b11a955d
-    Content-Disposition: form-data; name="hwp_id"
-
-    1
-    ------------------------------7424b11a955d
-    Content-Disposition: form-data; name="name"
-
-    myserver
-    ------------------------------7424b11a955d--
+    image_id=53&hwp_id=1&name=myserver
 
 `Server response:`
 
@@ -1510,27 +1474,31 @@ The *username* and *password* are returned with the details of the newly created
 
 ### 3.6 Keys
 
-A ***key*** captures the credentials required to access an ***Instance***. The Deltacloud API supports
-two main types of ***keys***: type **password** which have *username* and *password* attributes, or type
-**key** which have *fingerprint* and *pem* (private key) attributes (public/private keypair).
+A ***key*** captures the credentials required to access an ***Instance***. The
+Deltacloud API supports two main types of ***keys***: type **password** which
+have *username* and *password* attributes, or type **key** which have
+*fingerprint* and *pem* (private key) attributes (public/private keypair).
 The key type is determined by the back-end cloud provider.
 
-Some cloud providers require that the client specify the credentials to be used for connecting to an
- ***instance*** as a parameter to ***instance*** creation. An example is the Amazon EC2 cloud which uses
-***keys*** of type **key** and where the identifier of the **key** to be used with a given ***instance***
-is supplied in the *keyname* parameter to the [POST /api/instances](#create_instance_ec2) call.
+Some cloud providers require that the client specify the credentials to be used
+for connecting to an  ***instance*** as a parameter to ***instance*** creation.
+An example is the Amazon EC2 cloud which uses ***keys*** of type **key** and
+where the identifier of the **key** to be used with a given ***instance***
+is supplied in the *keyname* parameter to the
+[POST /api/instances](#create_instance_ec2) call.
 
-Other cloud providers report the ***instance*** credentials in the response to ***instance***
-creation and make them available for subsequent retrieval. An example is the Gogrid Cloud,
- which uses ***keys*** of type  **password** (note: the Rackspace cloud also reports credentials
-during ***instance*** creation though it does not provide a mechanism with which to retrieve
-those passwords thereafter).
+Other cloud providers report the ***instance*** credentials in the response to
+ ***instance*** creation and make them available for subsequent retrieval. An
+example is the Gogrid Cloud, which uses ***keys*** of type  **password**
+(note: the Rackspace cloud also reports credentials during ***instance*** creation
+though it does not provide a mechanism with which to retrieve those passwords thereafter).
 
 #### `GET /api/keys`
 
-This gives a listing of all available keys. The example shown below is for ***keys*** from the Amazon
-EC2 cloud, which are of type **key**. Note that the XML response does not contain the private key
-attribute. This is because EC2 only provides the private key once, when the key is created (see
+This gives a listing of all available keys. The example shown below is for
+***keys*** from the Amazon EC2 cloud, which are of type **key**. Note that the
+XML response does not contain the private key attribute. This is because EC2 only
+provides the private key once, when the key is created (see
 [key creation](#key_create) for an example):
 
 <a name=get_keys>.
@@ -1601,13 +1569,20 @@ Gogrid cloud:
 #### `POST /api/keys`
 
 Some back-end cloud providers allow a client to create new credentials for
-accessing Instances. The parameters (key attributes) required by this function will depend on the
- back-end and are specified in the relevant driver. At present only the Amazon EC2 cloud implements a key
-create method and this requires the key *name* to be specified as a parameter. It should be noted that
-the private key attribute of a newly created key is reported only once, in response to the create
-operation as shown in the example below. The client should save the private key for future use with
- ***instance*** authentication. In all subsequent calls, only the fingerprint attribute is displayed
- in the Deltacloud server response, as illustrated by the [GET /api/keys](#get_keys) call above.
+accessing Instances. The parameters (key attributes) required by this function
+will depend on the back-end and are specified in the relevant driver. At
+present only the Amazon EC2 cloud implements a key create method and this
+requires the key *name* to be specified as a parameter. It should be noted that
+the private key attribute of a newly created key is reported only once, in
+response to the create operation as shown in the example below.
+The client should save the private key for future use with  ***instance***
+authentication. In all subsequent calls, only the fingerprint attribute
+is displayed in the Deltacloud server response, as illustrated by
+the [GET /api/keys](#get_keys) call above.
+
+Note that as with other HTTP POST calls in the Deltacloud REST API, client requests
+may specify the required parameters as multipart/form-data, or using the
+application/x-www-form-urlencoded content type.
 
 <a name=key_create>.
 
@@ -1618,15 +1593,10 @@ operation as shown in the example below. The client should save the private key
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
-    Content-Length: 153
-    Expect: 100-continue
-    Content-Type: multipart/form-data; boundary=----------------------------92fbd163f915
+    Content-Length: 19
+    Content-Type: application/x-www-form-urlencoded
 
-    ------------------------------92fbd163f915
-    Content-Disposition: form-data; name="name"
-
-    jsmith_new_key
-    ------------------------------92fbd163f915--
+    name=jsmith_new_key
 
 `Server response:`
 
@@ -1717,7 +1687,7 @@ or egress traffic.
 
 As Amazon EC2 has no notion of a ***firewall rule*** ID, the Deltacloud server constructs one
 for each rule as the concatenation of its attributes. The format used is:
-owner_id~protocol~from_port~to_port~@sources.
+owner\_id~protocol~from\_port~to\_port~@sources.
 
 As explained above a source can be of type **address** in which case it defines an
 *IP type* (ipv4/ipv6), an *IP address* and *routing prefix* (CIDR netmask). Sources
@@ -1839,9 +1809,12 @@ Retrieve details of a single specified ***firewall***.
 
 #### `POST /api/firewalls`
 
-Creates a new ***firewall***. Clients must specify the ***firewall*** *name* and *description* as
-parameters to the request. On succesful completion the Deltacloud server will respond with **HTTP 201
-Created** and return details of the newly created ***firewall***:
+Creates a new ***firewall***. Clients must specify the ***firewall*** *name*
+and *description* as parameters to the request. On succesful completion the
+Deltacloud server will respond with **HTTP 201 Created** and return details
+of the newly created ***firewall***. As with other POST operations in the
+Deltacloud API, a client may specify parameters as multipart/form-data or using
+the application/x-www-form-urlencoded content-type.
 
 `Example request:`
 
@@ -1850,19 +1823,10 @@ Created** and return details of the newly created ***firewall***:
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
-    Content-Length: 285
-    Expect: 100-continue
-    Content-Type: multipart/form-data; boundary=----------------------------cdbcabd8ab04
-
-    ------------------------------cdbcabd8ab04
-    Content-Disposition: form-data; name="name"
-
-    Devel_Group
-    ------------------------------cdbcabd8ab04
-    Content-Disposition: form-data; name="description"
+    Content-Length: 64
+    Content-Type: application/x-www-form-urlencoded
 
-    Access for all development machines
-    ------------------------------cdbcabd8ab04--
+    name=Devel_Group&description=Access%20for%20all%20development%20machines
 
 `Server response:`
 
@@ -1880,12 +1844,12 @@ Created** and return details of the newly created ***firewall***:
       </rules>
     </firewall>
 
-<a name=delete_firewall_rule> .
+<a name=delete_firewall> .
 
 #### `DELETE /api/firewalls/:id`
 
-Deletes the specified ***firewall*** from the back-end cloud provider. The Deltacloud server will respond
-with **HTTP 204 No Content** after a successful deletion:
+Deletes the specified ***firewall*** from the back-end cloud provider. The Deltacloud
+server will respond with **HTTP 204 No Content** after a successful deletion:
 
 `Example request:`
 
@@ -1901,17 +1865,20 @@ with **HTTP 204 No Content** after a successful deletion:
     Date: Wed, 27 Jul 2011 09:47:43 GMT
 
 The rules governing the deletion of a ***firewall*** are back-end cloud specific.
-Since at present only the Amazon EC2 cloud supports the ***firewalls*** collection we describe the
-***firewall*** deletion rules for EC2 here.
-
-It is permitted to delete a ***firewall*** that has rules defined within it, with two caveats.
-You cannot delete a  ***firewall*** if it is referenced by another ***firewall***; for instance
- **firewall_1** has a rule giving access to **firewall_2**. An attempt to delete
-**firewall_2** will result in the error **InvalidGroup.InUse**, as shown in the example below. The second
-caveat is that you cannot delete a ***firewall*** if there are currently any running ***instances*** within
-that ***firewall*** (i.e. ***instances*** that specified the given ***firewall*** when they were launched).
-The error message in that case is **InvalidGroup.InUse: There are active instances using security group**.
-In both cases the error message is propagated from the back-end cloud provider to the requesting client:
+Since at present only the Amazon EC2 cloud supports the ***firewalls*** collection
+we describe the ***firewall*** deletion rules for EC2 here.
+
+It is permitted to delete a ***firewall*** that has rules defined within it, with
+two caveats. You cannot delete a  ***firewall*** if it is referenced by another
+***firewall***; for instance  **firewall_1** has a rule giving access to
+**firewall_2**. An attempt to delete **firewall_2** will result in the error
+**InvalidGroup.InUse**, as shown in the example below. The second caveat is that
+you cannot delete a ***firewall*** if there are currently any running ***instances***
+within that ***firewall*** (i.e. ***instances*** that specified the given
+***firewall*** when they were launched). The error message in that case is
+**InvalidGroup.InUse: There are active instances using security group**. In both
+cases the error message is propagated from the back-end cloud provider to the
+requesting client:
 
 `Example request: (error deleting a firewall referenced by another firewall)`
 
@@ -1939,17 +1906,23 @@ In both cases the error message is propagated from the back-end cloud provider t
 
 #### `POST /api/firewalls/:id/rules`
 
-Create a new ***firewall rule*** within a specified ***firewall***. A client must supply the **protocol**
-(one of *udp*, *tcp* or *icmp*), **port_from** and **port_to** as parameters. Ofcourse the client must also
-specify the **sources** to which the given rule is to apply. IP addresses are specified in CIDR format
-sequentially: *ip_address1=192.168.10.10/24*, *ip_address2=10.1.1.1/16* ... *ip_addressN=...*. The IP
-address '0.0.0.0/0' acts as a wildcard to specify **any** IP address.
-Source ***firewalls*** are also specified sequentially but the *owner_id* of the ***firewall*** that is to
- be authorized must also be supplied (this is an Amazon EC2 requirement): group1=name1,
-group1owner=1234567890, group2=name2, group2owner=0987654321, ... groupN=nameN, groupNowner=...
-
-The Deltacloud server responds with a **HTTP 201 Created** after a successful operation together with the
-details of the affected ***firewall***:
+Create a new ***firewall rule*** within a specified ***firewall***. A client
+must supply the **protocol** (one of *udp*, *tcp* or *icmp*), **port_from**
+and **port_to** as parameters. Ofcourse the client must also specify the
+**sources** to which the given rule is to apply. IP addresses are specified
+in CIDR format sequentially: *ip_address1=192.168.10.10/24*,
+*ip_address2=10.1.1.1/16* ... *ip_addressN=...*. The IP address '0.0.0.0/0'
+acts as a wildcard to specify **any** IP address. Source ***firewalls*** are
+also specified sequentially but the *owner_id* of the ***firewall*** that is
+to be authorized must also be supplied (this is an Amazon EC2 requirement):
+group1=name1, group1owner=1234567890, group2=name2, group2owner=0987654321,
+... groupN=nameN, groupNowner=...
+
+The Deltacloud server responds with a **HTTP 201 Created** after a successful
+operation together with the details of the affected ***firewall***. The example
+client request below specifies the required parameters as multipart/form-data.
+However clients may also legitimately use the application/x-www-form-urlencoded
+to provide firewall rule parameters.
 
 `Example request:`
 
@@ -2027,10 +2000,12 @@ details of the affected ***firewall***:
       </rules>
     </firewall>
 
+<a name=delete_firewall_rule> .
+
 #### `DELETE /api/firewalls/:id/:rule_id`
 
-Delete the specified firewall rule. The Deltacloud server will respond with **HTTP 204 No Content** on
-completion of a successful delete operation:
+Delete the specified firewall rule. The Deltacloud server will respond with
+**HTTP 204 No Content** on completion of a successful delete operation:
 
 `Example request:`
 
@@ -2053,11 +2028,12 @@ completion of a successful delete operation:
 
 ### 3.8 Addresses
 
-The ***addresses*** collection represents IP addresses and is intended to allow IP address management.
- This collection is currently implemented for the Amazon EC2 cloud driver. For EC2, IP address management
-corresponds to Amazon's 'Elastic IP' feature. As such, the ***addresses*** collection supports operations
-for creating or destroying an ***address*** as well as associating or disassociating an ***address*** from
-a running ***instance***.
+The ***addresses*** collection represents IP addresses and is intended to allow
+IP address management. This collection is currently implemented for the Amazon
+EC2 cloud driver. For EC2, IP address management corresponds to Amazon's
+'Elastic IP' feature. As such, the ***addresses*** collection supports operations
+for creating or destroying an ***address*** as well as associating or
+disassociating an ***address*** from a running ***instance***.
 
 #### `GET /api/addresses`
 
@@ -2177,12 +2153,14 @@ succesful operation.
 
 #### `POST /api/addresses/:id/associate`
 
-This operation associates a given ***address*** with a running ***instance***. The client must
-specify the *instance_id* as a parameter to this call. For Amazon EC2, the specified ***address***
-will replace the currently assigned *public_address* of the ***instance***. A succesful operation will
-produce a **HTTP 202 Accepted** response:
-
-
+This operation associates a given ***address*** with a running ***instance***.
+The client must specify the *instance_id* as a parameter to this call.
+For Amazon EC2, the specified ***address*** will replace the currently assigned
+*public_address* of the ***instance***. A succesful operation will produce a
+**HTTP 202 Accepted** response. The example client request below specifies the
+required  *instance_id* parameter using the application/x-www-form-urlencoded
+content-type, however this can also legitimately be specified using
+multipart/form-data.
 
 `Example request:`
 
@@ -2191,15 +2169,10 @@ produce a **HTTP 202 Accepted** response:
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
-    Content-Length: 156
-    Expect: 100-continue
-    Content-Type: multipart/form-data; boundary=----------------------------e4c1d4718683
+    Content-Length: 22
+    Content-Type: application/x-www-form-urlencoded
 
-    ------------------------------e4c1d4718683
-    Content-Disposition: form-data; name="instance_id"
-
-    i-9d8a3dfc
-    ------------------------------e4c1d4718683--
+    instance_id=i-9d8a3dfc
 
 `Server response:`
 
@@ -2235,20 +2208,23 @@ assigned.
 
 ### 3.9 Load Balancers
 
-***Load balancers*** allow distribution of ingress network traffic received by a specified IP address
-to a number of running ***instances***. For example, a number of ***instances*** that are fulfilling the
-role of web servers can be attached to a single ***load_balancer***. This would allow
-handling of large numbers of requests without degradation to the website performance.
-
-This collection is not supported by all back-end cloud providers and at present is implemented for the
-Gogrid and Amazon EC2 cloud drivers. A ***load_balancer*** is launched into a specific ***realm***
-and typically only ***instances*** within that ***realm*** may be 'attached' to the balancer. Each
-***load_balancer*** also has a list of ***instances***, a **public address** representing the IP address
-that the balancer will respond to client requests on, a **created_at** timestamp and a list of
-**listeners**. Each **listener** has a **protocol** (e.g., 'TCP'), a **load balancer port** and
-an **instance port** which represent the network ports on which the balancer accepts
-connections and the port to which network traffic is forwarded to ***instances*** in the
-**instance list**, respectively.
+***Load balancers*** allow distribution of ingress network traffic received by a
+ specified IP address to a number of running ***instances***. For example, a
+number of ***instances*** that are fulfilling the role of web servers can be
+attached to a single ***load_balancer***. This would allow handling of large
+numbers of requests without degradation to the website performance.
+
+This collection is not supported by all back-end cloud providers and at present
+is implemented for the Gogrid and Amazon EC2 cloud drivers. A
+***load_balancer*** is launched into a specific ***realm*** and typically only
+ ***instances*** within that ***realm*** may be 'attached' to the balancer. Each
+***load_balancer*** also has a list of ***instances***, a **public address**
+representing the IP address that the balancer will respond to client requests
+on, a **created_at** timestamp and a list of **listeners**. Each **listener**
+has a **protocol** (e.g., 'TCP'), a **load balancer port** and an
+**instance port** which represent the network ports on which the balancer accepts
+connections and the port to which network traffic is forwarded to ***instances***
+in the **instance list**, respectively.
 
 #### `GET /api/load_balancers`
 
@@ -2362,12 +2338,16 @@ Retrieve details for a specific load balancer:
 
 #### `POST /api/load_balancers`
 
-This operation creates a new ***load_balancer***. Clients must provide the ***load_balancer*** **name**,
- the **realm_id** to which the balancer is to apply, a **listener_protocol** which the balancer will
-respond to (one of **HTTP** or **TCP**), the **listener_balancer_port** which specifies the port
-that the ***load_balancer*** will be expecting network traffic on and finally the **listener_instance_port**
-which specifies the port on which ***instances*** will be receiving network traffic forwarded by the
-***load_balancer***.
+This operation creates a new ***load_balancer***. Clients must provide the
+***load_balancer*** **name**, the **realm_id** to which the balancer is to
+apply, a **listener_protocol** which the balancer will respond to (one of
+**HTTP** or **TCP**), the **listener_balancer_port** which specifies the port
+that the ***load_balancer*** will be expecting network traffic on and finally
+the **listener_instance_port** which specifies the port on which ***instances***
+will be receiving network traffic forwarded by the ***load_balancer***. As with
+other operations in the Deltacloud API, parameters may be specified by a requesting
+client using multipart/form-data or as application/x-www-form-urlencoded data
+as shown below:
 
 `Example request:`
 
@@ -2376,32 +2356,11 @@ which specifies the port on which ***instances*** will be receiving network traf
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
-    Content-Length: 603
-    Expect: 100-continue
-    Content-Type: multipart/form-data; boundary=----------------------------395a7b3a9c77
-
-    ------------------------------395a7b3a9c77
-    Content-Disposition: form-data; name="name"
-
-    webtraffic-balancer
-    ------------------------------395a7b3a9c77
-    Content-Disposition: form-data; name="realm_id"
-
-    us-east-1c
-    ------------------------------395a7b3a9c77
-    Content-Disposition: form-data; name="listener_protocol"
-
-    HTTP
-    ------------------------------395a7b3a9c77
-    Content-Disposition: form-data; name="listener_balancer_port"
-
-    80
-    ------------------------------395a7b3a9c77
-    Content-Disposition: form-data; name="listener_instance_port"
-
-    3001
-    ------------------------------395a7b3a9c77--
+    Content-Length: 121
+    Content-Type: application/x-www-form-urlencoded
 
+    name=webtraffic-balancer&realm_id=us-east-1c&listener_protocol=HTTP&
+    listener_balancer_port=80&listener_instance_port=3001
 
 `Server response:`
 
@@ -2454,9 +2413,12 @@ server will respond with **HTTP 204 No Content** for a succesful operation:
 
 #### `POST /api/load_balancers/:id/register`
 
-This operation registers a running ***instance*** with a specified ***load_balancer***. Clients
-must provide the **instance_id** as a parameter to the request. The Deltacloud server will respond
-with a **HTTP 204 No Content** after a succesful operation:
+This operation registers a running ***instance*** with a specified
+***load_balancer***. Clients must provide the **instance_id** as a parameter
+to the request. The Deltacloud server will respond with a **HTTP 204 No Content**
+after a succesful operation. The Deltacloud server will accept client request
+parameters encoded as multipart/form-data or as
+application/x-www-form-urlencoded data.
 
 `Example request:`
 
@@ -2465,15 +2427,10 @@ with a **HTTP 204 No Content** after a succesful operation:
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
-    Content-Length: 156
-    Expect: 100-continue
-    Content-Type: multipart/form-data; boundary=----------------------------6af752b909b2
-
-    ------------------------------6af752b909b2
-    Content-Disposition: form-data; name="instance_id"
+    Content-Length: 22
+    Content-Type: application/x-www-form-urlencoded
 
-    i-4f06b52e
-    ------------------------------6af752b909b2--
+    instance_id=i-4f06b52e
 
 `Server response:`
 
@@ -2482,8 +2439,10 @@ with a **HTTP 204 No Content** after a succesful operation:
 
 #### `POST /api/load_balancers/:id/unregister`
 
-This operation will unregister a specified ***instance*** from the given ***load_balancer***. The
-client must supply the **instance_id** parameter to identify the ***instance***:
+This operation will unregister a specified ***instance*** from the given
+***load_balancer***. The client must supply the **instance_id** parameter to
+identify the ***instance***, either as multipart/form-data or as
+application/x-www-form-urlencoded data (as shown below).
 
 `Example request:`
 
@@ -2492,15 +2451,10 @@ client must supply the **instance_id** parameter to identify the ***instance***:
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
-    Content-Length: 156
-    Expect: 100-continue
-    Content-Type: multipart/form-data; boundary=----------------------------987218f60703
-
-    ------------------------------987218f60703
-    Content-Disposition: form-data; name="instance_id"
+    Content-Length: 22
+    Content-Type: application/x-www-form-urlencoded
 
-    i-4f06b52e
-    ------------------------------987218f60703--
+    instance_id=i-4f06b52e
 
 `Server response:`
 
@@ -2517,17 +2471,19 @@ client must supply the **instance_id** parameter to identify the ***instance***:
 Storage resources are divided into two groups: ***storage volumes*** can be attached
 to a running instance (accessible by the instance OS), and *blob storage*
 which represents a generic 'key <−−> value' based data store, as implemented
-by Rackspace CloudFiles or Amazon S3. ***Storage snapshots*** represent a ***storage volume***,
-a backup of which is created at a particular point in time (a snapshot).
+by Rackspace CloudFiles or Amazon S3. ***Storage snapshots*** represent a
+***storage volume***, a backup of which is created at a particular point in time
+(a snapshot).
 
 ### 4.1 Storage Volumes
 
-A ***storage_volume*** has a **capacity** expressed in Gigabytes, a **created** timestamp, a **realm_id**
-specifying the ***realm*** in which the volume exists, a **state** (for Amazon EC2 this is one of
-creating | available | in-use | deleting | deleted | error) and a set of **actions**. When attached to
-an ***instance***, a ***storage_volume*** will also expose a **mount** element which contains the
-attributes **instance** and **device**, specifying the ***instance*** to which the volume is attached
-and the mount point (e.g. /dev/sdh), respectively.
+A ***storage_volume*** has a **capacity** expressed in Gigabytes, a **created**
+timestamp, a **realm_id** specifying the ***realm*** in which the volume exists,
+a **state** (for Amazon EC2 this is one of creating | available | in-use | deleting
+| deleted | error) and a set of **actions**. When attached to an ***instance***,
+a ***storage_volume*** will also expose a **mount** element which contains the
+attributes **instance** and **device**, specifying the ***instance*** to which
+the volume is attached and the mount point (e.g. /dev/sdh), respectively.
 
 #### `GET /api/storage_volumes`
 
@@ -2613,13 +2569,19 @@ This operation retrieves the details for the specified storage_volume:
 
 #### `POST /api/storage_volumes`
 
-This operation will create a new ***storage_volume***. A client may specify a **snapshot_id** from which
-to instantiate the ***storage_volume*** though this is optional. The **capacity** parameter, expressed in
-Gigabytes, is also optional and will default to 1 Gigabyte. Finally clients may also specify the
-**realm_id** as a ***storage_volume*** can typically only be attached to ***instances*** running within
-the specified ***realm***. If the ***realm*** is not specified it will default to the first realm returned
- by the cloud provider. A succesful operation will return **HTTP 201 Created** with the details of the newly
-created ***storage_volume***:
+This operation will create a new ***storage_volume***. A client may specify a
+**snapshot_id** from which to instantiate the ***storage_volume*** though this
+is optional. The **capacity** parameter, expressed in Gigabytes, is also optional
+and will default to 1 Gigabyte. Finally clients may also specify the **realm_id**
+as a ***storage_volume*** can typically only be attached to ***instances***
+ running within the specified ***realm***. If the ***realm*** is not specified
+it will default to the first realm returned by the cloud provider.
+A succesful operation will return **HTTP 201 Created** with the details of
+the newly created ***storage_volume***.
+
+As with the other **POST** operations in the Deltacloud API, clients
+may choose to specify operation parameters as multipart/form-data or
+as application/x-www-form-urlencoded data.
 
 
 `Example request:`
@@ -2629,19 +2591,10 @@ created ***storage_volume***:
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
-    Content-Length: 252
-    Expect: 100-continue
-    Content-Type: multipart/form-data; boundary=----------------------------90dea979a9f4
+    Content-Length: 31
+    Content-Type: application/x-www-form-urlencoded
 
-    ------------------------------90dea979a9f4
-    Content-Disposition: form-data; name="capacity"
-
-    10
-    ------------------------------90dea979a9f4
-    Content-Disposition: form-data; name="realm_id"
-
-    us-east-1c
-    ------------------------------90dea979a9f4--
+    capacity=10&realm_id=us-east-1c
 
 `Server response:`
 
@@ -2665,9 +2618,9 @@ created ***storage_volume***:
 
 #### `DELETE /api/storage_volumes/:id`
 
-Deletes the specified ***storage_volume***. The operation will return a **HTTP 204 No Content** after
-a succesful operation. Note that the operation will fail if the given ***storage_volume*** is currently
-attached to an ***instance***.
+Deletes the specified ***storage_volume***. The operation will return a
+**HTTP 204 No Content** after a succesful operation. Note that the operation will
+fail if the given ***storage_volume*** is currently attached to an ***instance***.
 
 `Example request:`
 
@@ -2710,13 +2663,17 @@ attached to an ***instance***.
 
 #### `POST /api/storage_volumes/:id/attach`
 
-This operation will attach the specified ***storage_volume*** to a running ***instance***. Clients must
-specify the **instance_id** and the **device** as parameters. The **device** parameter is used as the
-'mount point', that is, the location at which the ***storage_volume*** will be exposed to the given
-***instance*** (e.g., /dev/sdh). The Deltacloud server will respond with a **HTTP 202 Accepted** after
-a succesful attach operation together with details of the ***storage_volume***. Note in the example
- below that the **state** is reported as 'unknown' although the **mount** element is present, as the
+This operation will attach the specified ***storage_volume*** to a running
+***instance***. Clients must specify the **instance_id** and the **device**
+as parameters. The **device** parameter is used as the 'mount point', that is,
+ the location at which the ***storage_volume*** will be exposed to the given
+***instance*** (e.g., /dev/sdh). The Deltacloud server will respond with a
+**HTTP 202 Accepted** after a succesful attach operation together with details
+of the ***storage_volume***. Note in the example below that the **state** is
+reported as 'unknown' although the **mount** element is present, as the
 processing has not yet been completed (hence the **202** status code).
+Clients may specify the required parameters as multipart/form-data
+or as application/x-www-form-urlencoded data.
 
 `Example request:`
 
@@ -2725,19 +2682,10 @@ processing has not yet been completed (hence the **202** status code).
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
-    Content-Length: 259
-    Expect: 100-continue
-    Content-Type: multipart/form-data; boundary=----------------------------5a074e9c5fcc
+    Content-Length: 38
+    Content-Type: application/x-www-form-urlencoded
 
-    ------------------------------5a074e9c5fcc
-    Content-Disposition: form-data; name="instance_id"
-
-    i-b100b3d0
-    ------------------------------5a074e9c5fcc
-    Content-Disposition: form-data; name="device"
-
-    /dev/sdi
-    ------------------------------5a074e9c5fcc--
+    instance_id=i-b100b3d0&device=/dev/sdi
 
 `Server response:`
 
@@ -2764,11 +2712,12 @@ processing has not yet been completed (hence the **202** status code).
 
 #### `POST /api/storage_volumes/:id/detach`
 
-This operation detaches the given ***storage_volume*** from the ***instance*** to which it is currently
-attached. A succesful operation will return **HTTP 201 Accepted** together with details of the
-***storage_volume***. Note in the example that like the ***attach*** operation above, **state** is
- reported as 'unknown' and the **mount** element is still present as the processing has not yet been
-completed (hence the **202** status code).
+This operation detaches the given ***storage_volume*** from the ***instance***
+to which it is currently attached. A succesful operation will return
+**HTTP 201 Accepted** together with details of the ***storage_volume***. Note
+in the example that like the ***attach*** operation above, **state** is
+ reported as 'unknown' and the **mount** element is still present as the
+processing has not yet been completed (hence the **202** status code).
 
 `Example request:`
 
@@ -2810,15 +2759,16 @@ completed (hence the **202** status code).
 
 ### 4.2 Storage Snapshots
 
-A ***storage_snapshot*** captures the point-in-time state of a ***storage_volume***. Each snapshot has
-a **created** timestamp, and a ***storage_volume*** attribute referring to the volume from which the
-snapshot was made.
+A ***storage_snapshot*** captures the point-in-time state of a ***storage_volume***.
+Each snapshot has a **created** timestamp, and a ***storage_volume*** attribute
+referring to the volume from which the snapshot was made.
 
 #### `GET /api/storage_snapshots`
 
-List all available ***storage snapshots***. For Amazon EC2 this list includes *any* snapshots that
-are available to the requesting client account, including those that may not have been created by that
-account. As this list is very long the example below shows only part of the response:
+List all available ***storage snapshots***. For Amazon EC2 this list includes
+*any* snapshots that are available to the requesting client account, including
+those that may not have been created by that account. As this list is very long
+the example below shows only part of the response:
 
 `Example request:`
 
@@ -2891,10 +2841,12 @@ Get all details for a specified ***storage snapshot***, as shown below:
 
 #### `POST /api/storage_snapshots`
 
-This operation will create a new ***storage_snapshot***. Clients must specify the ***storage_volume***
-from which the snapshot is to be created, by supplying the **volume_id** parameter. The Deltacloud
-server responds with **HTTP 201 Created** after a succesful operation and provides details of the
-newly created ***storage_snapshot***:
+This operation will create a new ***storage_snapshot***. Clients must specify
+the ***storage_volume*** from which the snapshot is to be created, by supplying
+the **volume_id** parameter. The Deltacloud server responds with
+**HTTP 201 Created** after a succesful operation and provides details of the
+newly created ***storage_snapshot***. Clients may specify operation parameters as
+multipart/form-data, or as application/x-www-form-urlencoded data:
 
 `Example request:`
 
@@ -2903,15 +2855,10 @@ newly created ***storage_snapshot***:
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)
     Host: localhost:3001
     Accept: */*
-    Content-Length: 156
-    Expect: 100-continue
-    Content-Type: multipart/form-data; boundary=----------------------------91f7fa88be76
+    Content-Length: 22
+    Content-Type: application/x-www-form-urlencoded
 
-    ------------------------------91f7fa88be76
-    Content-Disposition: form-data; name="volume_id"
-
-    vol-99fbe5f2
-    ------------------------------91f7fa88be76--
+    volume_id=vol-99fbe5f2
 
 `Server response:`
 
@@ -2928,8 +2875,8 @@ newly created ***storage_snapshot***:
 
 #### `DELETE /api/storage_snapshots/:id`
 
-Deletes the specified ***storage_snapshot***. The operation returns a **HTTP 204 No Content** after a
-succesful operation:
+Deletes the specified ***storage_snapshot***. The operation returns a
+**HTTP 204 No Content** after a succesful operation:
 
 `Example request:`
 
@@ -3035,19 +2982,21 @@ that it contains.
 
 #### `POST /api/buckets`
 
-Creates a new ***bucket*** and requires that you specify the ***name*** as a parameter,
-in the form of multipart/form-data (i.e., HTTP form field). Optionally for Amazon S3
-buckets, you can specify a bucket location with the ***location*** parameter, as per
+Creates a new ***bucket*** and requires that you specify the ***name*** as a
+parameter. Optionally for Amazon S3 buckets, you can specify a bucket location
+with the ***location*** parameter, as per
  [Regions and Endpoints for Amazon Simple Storage Service](http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html "AWS Regions and Endpoints");
 valid values for S3 bucket *location* parameter are: "us-west-1", "EU",
 "ap-southeast-1", "ap-northeast-1" (while not specifying a location defaults to
-the "US Standard" region).
+the "US Standard" region). Note that clients may specify parameters as
+multipart/form-data or using a content-type of application/x-www-form-urlencoded.
 
-On succesful creation this call will return a ***201*** HTTP status, specifying the URI
-of the newly created bucket in the **Location** header and the newly created
-***bucket*** object in the response message body. The example request below creates a
-new ***bucket*** in the *EU (Ireland)* region. If the given backend cloud does not
-support locations then the *location* parameter is silently ignored.
+On succesful creation this call will return a ***201*** HTTP status, specifying
+the URI of the newly created bucket in the **Location** header and the newly
+created ***bucket*** object in the response message body. The example request
+below creates a new ***bucket*** in the *EU (Ireland)* region. If the given
+backend cloud does not support locations then the *location* parameter is
+silently ignored.
 
 `Example request:`
 
@@ -3056,18 +3005,10 @@ support locations then the *location* parameter is silently ignored.
     User-Agent: curl/7.20.1
     Host: localhost:3001
     Accept: */*
-    Content-Length: 252
-    Content-Type: multipart/form-data; boundary=----------------------------4e90611c39f2
-
-    ------------------------------4e90611c39f2
-    Content-Disposition: form-data; name="name"
-
-    mybucketeurope
-    ------------------------------4e90611c39f2
-    Content-Disposition: form-data; name="location"
+    Content-Length: 31
+    Content-Type: application/x-www-form-urlencoded
 
-    EU
-    ------------------------------4e90611c39f2--
+    name=mybucketeurope&location=EU
 
 `Server response:`
 
@@ -3082,6 +3023,7 @@ support locations then the *location* parameter is silently ignored.
       <size>0</size>
     </bucket>
 
+<a name=delete_bucket>.
 #### `DELETE /api/buckets/:id`
 
 Deletes the specified ***bucket***, which must be empty (otherwise the call will
@@ -3162,6 +3104,7 @@ filename=blob_name* in the HTTP response headers.
 
     <BLOB DATA HERE>
 
+<a name=create_blob>.
 #### `PUT /api/buckets/:bucket_id/:blob_id`
 
 Creates a ***blob*** object and sets its content. If the ***blob*** already exists then
@@ -3214,8 +3157,8 @@ The deltacloud server also responds to an alternative `POST` route for creating
 updating a ***blob*** object. As with the `PUT` method for creating/updating a
 ***blob***, the client must specify the ***bucket*** in which the ***blob*** is to
 be created through the call URI (i.e. you `POST` to the specified ***bucket***).
-The rest of the required fields, that is, the ***blob_id*** (name of the blob),
-the  ***blob_data*** and the ***content-length*** are specified by the client as
+The rest of the required fields, that is, the name of the ***blob***, the
+ ***blob_data*** and the ***content-length*** are specified by the client as
 ***multipart/form-data*** (i.e. in `HTTP POST` form fields).
 
 In order to specify the optional user metadata for a given ***blob*** the client
@@ -3240,12 +3183,12 @@ deltacloud HTML interface (provided for testing purposes).
     Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==
     User-Agent: curl/7.20.1 (i386-redhat-linux-gnu) libcurl/7.20.1 N
     Accept: */*
-    Content-Length: 113584
+    Content-Length: 113582
     Expect: 100-continue
     Content-Type: multipart/form-data; boundary=----------------------------517f5f2df858
 
     ------------------------------517f5f2df858
-    Content-Disposition: form-data; name="blob_id"
+    Content-Disposition: form-data; name="blob"
 
     12Jul2011blob
     ------------------------------517f5f2df858
diff --git a/site/output/api.html b/site/output/api.html
index 8053256..e2e3add 100644
--- a/site/output/api.html
+++ b/site/output/api.html
@@ -31,11 +31,14 @@
             <a class='inactive' href='./download.html' title='Get the latest releases'>Download</a>
           </li>
           <li>
-            <a class='inactive' href='./contribute.html' title='Information about design/development process'>Contribute</a>
+            <a class='inactive' href='./developers.html' title='Information for developers'>Developers</a>
           </li>
           <li>
             <a class='active' href='./documentation.html' title='Project documentation'>Documentation</a>
           </li>
+          <li>
+            <a class='inactive' href='./contact.html' title='Contact us!'>Contact</a>
+          </li>
         </ul>
       </div>
     </div>
@@ -44,7 +47,7 @@
         <ul class='l1'>
           <li>
             <a class='inactive' href='documentation.html'>
-              Overview
+              Installation
             </a>
           </li>
           <li>
@@ -58,11 +61,6 @@
             </a>
           </li>
           <li>
-            <a class='inactive' href='framework.html'>
-              Framework
-            </a>
-          </li>
-          <li>
             <a class='inactive' href='client-ruby.html'>
               Ruby Client
             </a>
@@ -477,6 +475,8 @@
         
         <hr />
         
+        <p><a name="authentication">.</a></p>
+        
         <h3 id="h1_3">1.3 Authentication</h3>
         
         <p>The Deltacloud API server is stateless, and does not keep any information
@@ -487,7 +487,8 @@
         <p>The specifics of what needs to be sent varies from cloud to cloud; some
         cloud providers employ a username and password for API access, whilst
         others use special-purpose API keys. A list of the credentials that a given
-        cloud provider expects for API access is <a href="documentation.html">available here</a></p>
+        cloud provider expects for API access is
+        <a href="drivers.html#credentials">available here</a></p>
         
         <br />
         
@@ -601,7 +602,8 @@
         
         <p>Any part of the official API can be reached through the main entry point,
         by default http://localhost:3001/api. The entry point list the resources
-        the server knows about for the current cloud provider; for the Amazon EC2 driver for example, these are:</p>
+        the server knows about for the current cloud provider; for the Amazon EC2
+        driver for example, these are:</p>
         
         <ul>
         <li>Instances</li>
@@ -682,8 +684,8 @@
         or different pools of resources within a single datacenter. A cloud provider may
         insist that resources must all exist within a single <strong><em>realm</em></strong> in order to cooperate.
         For instance, storage volumes may only be allowed to be mounted to instances within
-        the same <strong><em>realm</em></strong>. Generally speaking, going from one <strong><em>realm</em></strong> to another within the same
-        cloud may change many aspects of the cloud, such as SLA’s, pricing terms, etc.</p>
+        the same <strong><em>realm</em></strong>. Generally speaking, going from one <strong><em>realm</em></strong> to another within
+        the same cloud may change many aspects of the cloud, such as SLA’s, pricing terms, etc.</p>
         
         <h4 id="h3_1_1"><code>GET /api/realms</code></h4>
         
@@ -702,12 +704,12 @@
         
         <h4 id="h3_1_2"><code>GET /api/realms/:id</code></h4>
         
-        <p>Provide the details of a <strong><em>realm</em></strong>. Currently, these are a <strong><em>name</em></strong>, a  <strong><em>state</em></strong> and a
-         <em><strong>limit</strong> applicable to the current requester. The </em><strong>name</strong><em> is an arbitrary label
-        with no specific meaning in the API. The </em><strong>state</strong><em> can be either </em><strong>AVAILABLE</strong><em>
-         or </em><strong>UNAVAILABLE</strong><em>. The example below shows the </em><strong>realm</strong><em> for the Rackspace driver.
-        Since Rackspace does not currently have a notion of </em><strong>realms</strong><em> the Deltacloud
-        Rackspace driver provides a single </em><strong>realm</strong>* called 'US', signifying that all
+        <p>Provide the details of a <strong><em>realm</em></strong>. Currently, these are a <strong>name</strong>, a  <strong>state</strong> and a
+         <strong>limit</strong> applicable to the current requester. The <strong><em>name</em></strong> is an arbitrary label
+        with no specific meaning in the API. The <strong>state</strong> can be either <strong>AVAILABLE</strong>
+         or <strong>UNAVAILABLE</strong>. The example below shows the <strong><em>realm</em></strong> for the Rackspace driver.
+        Since Rackspace does not currently have a notion of <strong><em>realms</em></strong> the Deltacloud
+        Rackspace driver provides a single <strong><em>realm</em></strong> called 'US', signifying that all
         compute resources for that cloud provider are hosted in the United States:</p>
         
         <p><code>Example request:</code></p>
@@ -825,6 +827,8 @@
         attribute that specifies the URI to which a client may issue a <strong>HTTP POST</strong> for creation of
         an <strong><em>instance</em></strong> from the given <strong><em>image</em></strong>.</p>
         
+        <p><a name="list_images">.</a></p>
+        
         <h4 id="h3_3_1"><code>GET /api/images</code></h4>
         
         <p>Return a list of all <strong><em>images</em></strong> available in the back-end cloud. By default this call will
@@ -869,14 +873,17 @@
         <pre><code>...&#x000A;&lt;actions&gt;&#x000A;  &lt;link href='http://localhost:3002/api/instances/20109341/reboot' method='post' rel='reboot' /&gt;&#x000A;  &lt;link href='http://localhost:3002/api/instances/20109341/stop' method='post' rel='stop' /&gt;&#x000A;  &lt;link href='http://localhost:3002/api/instances/20109341/run;id=20109341' method='post' rel='run' /&gt;&#x000A;  &lt;link href='http://localhost:3002/api/images;instance_id=20109341' method='post' rel='create_image' /&gt;&#x000A;&lt;/actions&gt;&#x000A;...&#x000A;</code></pre>
         
         <p>To create a new <strong><em>image</em></strong> the client must specify the <em>instance_id</em> of the running instance.
-         Optionally, the client may also provide a <em>name</em> and a <em>description</em>. The parameters are
-        specified as multipart/form-data fields in the client POST. The Deltacloud server will
-        respond to a successful operation with <strong>HTTP 201 Created</strong> and provide details of the
+         Optionally, the client may also provide a <em>name</em> and a <em>description</em>. The parameters may
+        be specified as multipart/form-data fields in the client POST.</p>
+        
+        <p>Alternatively, clients may also specify parameters using a content-type of
+        application/x-www-form-urlencoded. The Deltacloud server will respond to a
+        successful operation with <strong>HTTP 201 Created</strong> and provide details of the
         newly created <strong><em>image</em></strong>:</p>
         
         <p><code>Example request:</code></p>
         
-        <pre><code>POST /api/images?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3002&#x000A;Accept: */*&#x000A;Content-Length: 404&#x000A;Expect: 100-continue&#x000A;Content-Type: multipart/form-data; boundary=----------------------------ba9acb193034&#x000A;&#x000A;------------------------------ba9acb193034&#x000A;Content-Disposition: form-data; name="instance_id"&#x000A;&#x000A;20109341&#x000A;------------------------------ba9acb193034&#x000A;Content-Disposition: form-data; name="name"&#x000A;&#x000A;customisedserver&#x000A;------------------------------ba9acb193034&#x000A;Content-Disposition: form-data; name="description"&#x000A;&#x000A;jsmith customised web server July 21 2011&#x000A;------------------------------ba9acb193034--&#x000A;</code></pre>
+        <pre><code>POST /api/images?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3002&#x000A;Accept: */*&#x000A;Content-Length: 96&#x000A;Content-Type: application/x-www-form-urlencoded&#x000A;&#x000A;instance_id=20109341&amp;name=customisedserver&amp;description=jsmith%20cu&#x000A;stomised%20web%20server%20July%2021%202011&#x000A;</code></pre>
         
         <p><code>Server response:</code></p>
         
@@ -1063,42 +1070,51 @@
         
         <h4 id="h3_5_4"><code>POST /api/instances</code></h4>
         
-        <p>Create a new <strong><em>instance</em></strong>. At a minimum clients must specify the <strong><em>image</em></strong> from
-        which the virtual machine <strong><em>instance</em></strong> is to be created. Optionally a client
-        may also specify a <strong><em>hardware profile</em></strong> and <strong><em>realm</em></strong> (with default values used
-        otherwise). Clients can also provide a <em>name</em> for the new <em>instance</em> though this is not
-        supported by all back-end cloud providers. Whether a given feature is available is advertised
-        in the response to the Deltacloud server API entry point.
-        The details of the new <strong><em>instance</em></strong> are returned in response to this operation.</p>
-        
-        <p>For creation of an <strong><em>instance</em></strong> in the Amazon EC2 cloud a client can also specify the
-        name of the EC2 keypair to be used as well as the firewalls (EC2 security groups) that the
-        <strong><em>instance</em></strong> should be launched into. The EC2 keypair is specified with the parameter <em>keyname</em>
-        while firewalls are specified sequentially as <em>firewalls1</em> ... <em>firewalls2</em> ... etc. These parameters
-        are specified in the first <strong><em>instance</em></strong> creation example below. Note that the values for
-        public and private addresses are blank in the server response, as these have not yet been
-        assigned by the cloud provider. Subsequent requests for the <strong><em>instance</em></strong> details
-        will provide these values.</p>
+        <p>Create a new <strong><em>instance</em></strong>. At a minimum clients must specify the <strong><em>image</em></strong>
+        from which the virtual machine <strong><em>instance</em></strong> is to be created. Optionally a
+        client may also specify a <strong><em>hardware profile</em></strong> and <strong><em>realm</em></strong> (with default
+        values used otherwise). Clients can also provide a <em>name</em> for the new <em>instance</em>
+         though this is not supported by all back-end cloud providers. Whether a given
+        feature is available is advertised in the response to the Deltacloud server
+        API entry point. The details of the new <strong><em>instance</em></strong> are returned in
+        response to this operation.</p>
+        
+        <p>For creation of an <strong><em>instance</em></strong> in the Amazon EC2 cloud a client can also
+        specify the name of the EC2 keypair to be used as well as the firewalls
+        (EC2 security groups) that the <strong><em>instance</em></strong> should be launched into. The
+        EC2 keypair is specified with the parameter <em>keyname</em> while firewalls are
+        specified sequentially as <em>firewalls1</em> ... <em>firewalls2</em> ... etc. These parameters
+        are specified in the first <strong><em>instance</em></strong> creation example below. Note that the
+        values for public and private addresses are blank in the server response, as
+        these have not yet been assigned by the cloud provider. Subsequent requests
+        for the <strong><em>instance</em></strong> details will provide these values.</p>
+        
+        <p>As with other POST operations in the Deltacloud API, clients may specify parameters
+        as multipart/form-data or as  x-www-url-form-urlencoded content type, as demonstrated
+        by the examples below.</p>
         
         <p><a name="create_instance_ec2">.</a></p>
         
         <p><code>Client request: (AWS EC2)</code></p>
         
-        <pre><code>POST /api/instances?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 676&#x000A;Expect: 100-continue&#x000A;Content-Type: multipart/form-data; boundary=----------------------------cce0758d1679&#x000A;&#x000A;------------------------------cce0758d1679&#x000A;Content-Disposition: form-data; name="keyname"&#x000A;&#x000A;eftah&#x000A;------------------------------cce0758d1679&#x000A;Content-Disposition: form-data; name="image_id"&#x000A;&#x000A;ami-f51aff9c&#x000A;------------------------------cce0758d1679&#x000A;Content-Disposition: form-data; name="realm_id"&#x000A;&#x000A;us-east-1c&#x000A;------------------------------cce0758d1679&#x000A;Content-Disposition: form-data; name="hwp_id"&#x000A;&#x000A;c1.medium&#x000A;------------------------------cce0758d1679&#x000A;Content-!
 Disposition: form-data; name="firewalls1"&#x000A;&#x000A;default&#x000A;------------------------------cce0758d1679&#x000A;Content-Disposition: form-data; name="firewalls2"&#x000A;&#x000A;test&#x000A;------------------------------cce0758d1679--&#x000A;</code></pre>
+        <pre><code>POST /api/instances?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 107&#x000A;Content-Type: application/x-www-form-urlencoded&#x000A;&#x000A;keyname=eftah&amp;image_id=ami-f51aff9c&amp;realm_id=us-east-1c&amp;hwp_id=c1.medium&amp;&#x000A;firewalls1=default&amp;firewalls2=test&#x000A;</code></pre>
         
         <p><code>Server response:</code></p>
         
         <pre><code>HTTP/1.1 201 Created&#x000A;Content-Type: application/xml&#x000A;Content-Length: 1183&#x000A;&#x000A;&lt;?xml version='1.0' encoding='utf-8' ?&gt;&#x000A;&lt;instance href='http://localhost:3001/api/instances/i-cbb861aa' id='i-cbb861aa'&gt;&#x000A;  &lt;name&gt;ami-f51aff9c&lt;/name&gt;&#x000A;  &lt;owner_id&gt;393485797142&lt;/owner_id&gt;&#x000A;  &lt;image href='http://localhost:3001/api/images/ami-f51aff9c' id='ami-f51aff9c'&gt;&lt;/image&gt;&#x000A;  &lt;realm href='http://localhost:3001/api/realms/us-east-1c' id='us-east-1c'&gt;&lt;/realm&gt;&#x000A;  &lt;state&gt;PENDING&lt;/state&gt;&#x000A;  &lt;hardware_profile href='http://localhost:3001/api/hardware_profiles/c1.medium' id='c1.medium'&gt;&#x000A;  &lt;/hardware_profile&gt;&#x000A;  &lt;actions&gt;&#x000A;    &lt;link href='http://localhost:3001/api/instances/i-cbb861aa/stop' method='post' rel='stop' /&gt;&#x000A;    &lt;link href='http://localhost:3001/api/instances/i-cbb861aa/run;id=i-cbb861aa!
 ' method='post' rel='run' /&gt;&#x000A;  &lt;/actions&gt;&#x000A;  &lt;launch_time&gt;2011-07-22T16:09:45.000Z&lt;/launch_time&gt;&#x000A;  &lt;public_addresses&gt;&lt;/public_addresses&gt;&#x000A;  &lt;private_addresses&gt;&lt;/private_addresses&gt;&#x000A;  &lt;firewalls&gt;&#x000A;    &lt;firewall href='http://localhost:3001/api/firewalls/test' id='test'&gt;&lt;/firewall&gt;&#x000A;    &lt;firewall href='http://localhost:3001/api/firewalls/default' id='default'&gt;&lt;/firewall&gt;&#x000A;  &lt;/firewalls&gt;&#x000A;  &lt;authentication type='key'&gt;&#x000A;    &lt;login&gt;&#x000A;      &lt;keyname&gt;eftah&lt;/keyname&gt;&#x000A;    &lt;/login&gt;&#x000A;  &lt;/authentication&gt;&#x000A;&lt;/instance&gt;&#x000A;</code></pre>
         
+        <p><a name="create_instance_rax">.</a></p>
+        
         <p>The second example given below shows creation of an <strong><em>instance</em></strong> in the Rackspace
         Cloudservers cloud. Here you can see that the client provides the optional <em>name</em>
          parameter and that the created instance uses authentication of type <strong>password</strong>.
-        The <em>username</em> and <em>password</em> are returned with the details of the newly created
-        <strong><em>instance</em></strong>:</p>
+        Furthermore, in this example the requesting client uses a content-type of
+        application/x-www-form-urlencoded. The <em>username</em> and <em>password</em> are returned with
+        the details of the newly created <strong><em>instance</em></strong>:</p>
         
         <p><code>Example request: (Rackspace Cloudservers)</code></p>
         
-        <pre><code>POST /api/instances?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3002&#x000A;Accept: */*&#x000A;Content-Length: 342&#x000A;Expect: 100-continue&#x000A;Content-Type: multipart/form-data; boundary=----------------------------7424b11a955d&#x000A;&#x000A;------------------------------7424b11a955d&#x000A;Content-Disposition: form-data; name="image_id"&#x000A;&#x000A;53&#x000A;------------------------------7424b11a955d&#x000A;Content-Disposition: form-data; name="hwp_id"&#x000A;&#x000A;1&#x000A;------------------------------7424b11a955d&#x000A;Content-Disposition: form-data; name="name"&#x000A;&#x000A;myserver&#x000A;------------------------------7424b11a955d--&#x000A;</code></pre>
+        <pre><code>POST /api/instances?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3002&#x000A;Accept: */*&#x000A;Content-Length: 34&#x000A;Content-Type: application/x-www-form-urlencoded&#x000A;&#x000A;image_id=53&amp;hwp_id=1&amp;name=myserver&#x000A;</code></pre>
         
         <p><code>Server response:</code></p>
         
@@ -1116,27 +1132,31 @@
         
         <h3 id="h3_6">3.6 Keys</h3>
         
-        <p>A <strong><em>key</em></strong> captures the credentials required to access an <strong><em>Instance</em></strong>. The Deltacloud API supports
-        two main types of <strong><em>keys</em></strong>: type <strong>password</strong> which have <em>username</em> and <em>password</em> attributes, or type
-        <strong>key</strong> which have <em>fingerprint</em> and <em>pem</em> (private key) attributes (public/private keypair).
+        <p>A <strong><em>key</em></strong> captures the credentials required to access an <strong><em>Instance</em></strong>. The
+        Deltacloud API supports two main types of <strong><em>keys</em></strong>: type <strong>password</strong> which
+        have <em>username</em> and <em>password</em> attributes, or type <strong>key</strong> which have
+        <em>fingerprint</em> and <em>pem</em> (private key) attributes (public/private keypair).
         The key type is determined by the back-end cloud provider.</p>
         
-        <p>Some cloud providers require that the client specify the credentials to be used for connecting to an
-         <strong><em>instance</em></strong> as a parameter to <strong><em>instance</em></strong> creation. An example is the Amazon EC2 cloud which uses
-        <strong><em>keys</em></strong> of type <strong>key</strong> and where the identifier of the <strong>key</strong> to be used with a given <strong><em>instance</em></strong>
-        is supplied in the <em>keyname</em> parameter to the <a href="#create_instance_ec2">POST /api/instances</a> call.</p>
+        <p>Some cloud providers require that the client specify the credentials to be used
+        for connecting to an  <strong><em>instance</em></strong> as a parameter to <strong><em>instance</em></strong> creation.
+        An example is the Amazon EC2 cloud which uses <strong><em>keys</em></strong> of type <strong>key</strong> and
+        where the identifier of the <strong>key</strong> to be used with a given <strong><em>instance</em></strong>
+        is supplied in the <em>keyname</em> parameter to the
+        <a href="#create_instance_ec2">POST /api/instances</a> call.</p>
         
-        <p>Other cloud providers report the <strong><em>instance</em></strong> credentials in the response to <strong><em>instance</em></strong>
-        creation and make them available for subsequent retrieval. An example is the Gogrid Cloud,
-         which uses <strong><em>keys</em></strong> of type  <strong>password</strong> (note: the Rackspace cloud also reports credentials
-        during <strong><em>instance</em></strong> creation though it does not provide a mechanism with which to retrieve
-        those passwords thereafter).</p>
+        <p>Other cloud providers report the <strong><em>instance</em></strong> credentials in the response to
+         <strong><em>instance</em></strong> creation and make them available for subsequent retrieval. An
+        example is the Gogrid Cloud, which uses <strong><em>keys</em></strong> of type  <strong>password</strong>
+        (note: the Rackspace cloud also reports credentials during <strong><em>instance</em></strong> creation
+        though it does not provide a mechanism with which to retrieve those passwords thereafter).</p>
         
         <h4 id="h3_6_1"><code>GET /api/keys</code></h4>
         
-        <p>This gives a listing of all available keys. The example shown below is for <strong><em>keys</em></strong> from the Amazon
-        EC2 cloud, which are of type <strong>key</strong>. Note that the XML response does not contain the private key
-        attribute. This is because EC2 only provides the private key once, when the key is created (see
+        <p>This gives a listing of all available keys. The example shown below is for
+        <strong><em>keys</em></strong> from the Amazon EC2 cloud, which are of type <strong>key</strong>. Note that the
+        XML response does not contain the private key attribute. This is because EC2 only
+        provides the private key once, when the key is created (see
         <a href="#key_create">key creation</a> for an example):</p>
         
         <p><a name="get_keys">.</a></p>
@@ -1165,19 +1185,26 @@
         <h4 id="h3_6_3"><code>POST /api/keys</code></h4>
         
         <p>Some back-end cloud providers allow a client to create new credentials for
-        accessing Instances. The parameters (key attributes) required by this function will depend on the
-         back-end and are specified in the relevant driver. At present only the Amazon EC2 cloud implements a key
-        create method and this requires the key <em>name</em> to be specified as a parameter. It should be noted that
-        the private key attribute of a newly created key is reported only once, in response to the create
-        operation as shown in the example below. The client should save the private key for future use with
-         <strong><em>instance</em></strong> authentication. In all subsequent calls, only the fingerprint attribute is displayed
-         in the Deltacloud server response, as illustrated by the <a href="#get_keys">GET /api/keys</a> call above.</p>
+        accessing Instances. The parameters (key attributes) required by this function
+        will depend on the back-end and are specified in the relevant driver. At
+        present only the Amazon EC2 cloud implements a key create method and this
+        requires the key <em>name</em> to be specified as a parameter. It should be noted that
+        the private key attribute of a newly created key is reported only once, in
+        response to the create operation as shown in the example below.
+        The client should save the private key for future use with  <strong><em>instance</em></strong>
+        authentication. In all subsequent calls, only the fingerprint attribute
+        is displayed in the Deltacloud server response, as illustrated by
+        the <a href="#get_keys">GET /api/keys</a> call above.</p>
+        
+        <p>Note that as with other HTTP POST calls in the Deltacloud REST API, client requests
+        may specify the required parameters as multipart/form-data, or using the
+        application/x-www-form-urlencoded content type.</p>
         
         <p><a name="key_create">.</a></p>
         
         <p><code>Example request:</code></p>
         
-        <pre><code>POST /api/keys?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 153&#x000A;Expect: 100-continue&#x000A;Content-Type: multipart/form-data; boundary=----------------------------92fbd163f915&#x000A;&#x000A;------------------------------92fbd163f915&#x000A;Content-Disposition: form-data; name="name"&#x000A;&#x000A;jsmith_new_key&#x000A;------------------------------92fbd163f915--&#x000A;</code></pre>
+        <pre><code>POST /api/keys?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 19&#x000A;Content-Type: application/x-www-form-urlencoded&#x000A;&#x000A;name=jsmith_new_key&#x000A;</code></pre>
         
         <p><code>Server response:</code></p>
         
@@ -1272,24 +1299,27 @@
         
         <h4 id="h3_7_3"><code>POST /api/firewalls</code></h4>
         
-        <p>Creates a new <strong><em>firewall</em></strong>. Clients must specify the <strong><em>firewall</em></strong> <em>name</em> and <em>description</em> as
-        parameters to the request. On succesful completion the Deltacloud server will respond with <strong>HTTP 201
-        Created</strong> and return details of the newly created <strong><em>firewall</em></strong>:</p>
+        <p>Creates a new <strong><em>firewall</em></strong>. Clients must specify the <strong><em>firewall</em></strong> <em>name</em>
+        and <em>description</em> as parameters to the request. On succesful completion the
+        Deltacloud server will respond with <strong>HTTP 201 Created</strong> and return details
+        of the newly created <strong><em>firewall</em></strong>. As with other POST operations in the
+        Deltacloud API, a client may specify parameters as multipart/form-data or using
+        the application/x-www-form-urlencoded content-type.</p>
         
         <p><code>Example request:</code></p>
         
-        <pre><code>POST /api/firewalls?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 285&#x000A;Expect: 100-continue&#x000A;Content-Type: multipart/form-data; boundary=----------------------------cdbcabd8ab04&#x000A;&#x000A;------------------------------cdbcabd8ab04&#x000A;Content-Disposition: form-data; name="name"&#x000A;&#x000A;Devel_Group&#x000A;------------------------------cdbcabd8ab04&#x000A;Content-Disposition: form-data; name="description"&#x000A;&#x000A;Access for all development machines&#x000A;------------------------------cdbcabd8ab04--&#x000A;</code></pre>
+        <pre><code>POST /api/firewalls?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 64&#x000A;Content-Type: application/x-www-form-urlencoded&#x000A;&#x000A;name=Devel_Group&amp;description=Access%20for%20all%20development%20machines&#x000A;</code></pre>
         
         <p><code>Server response:</code></p>
         
         <pre><code>HTTP/1.1 201 Created&#x000A;Content-Type: application/xml&#x000A;Date: Wed, 27 Jul 2011 08:35:43 GMT&#x000A;Content-Length: 296&#x000A;&#x000A;&lt;?xml version='1.0' encoding='utf-8' ?&gt;&#x000A;&lt;firewall href='http://localhost:3001/api/firewalls/Devel_Group' id='Devel_Group'&gt;&#x000A;  &lt;name&gt;&lt;![CDATA[Devel_Group]]&gt;&lt;/name&gt;&#x000A;  &lt;description&gt;&lt;![CDATA[Access for all development machines]]&gt;&lt;/description&gt;&#x000A;  &lt;owner_id&gt;&lt;/owner_id&gt;&#x000A;  &lt;rules&gt;&#x000A;  &lt;/rules&gt;&#x000A;&lt;/firewall&gt;&#x000A;</code></pre>
         
-        <p><a name="delete_firewall_rule"> .</a></p>
+        <p><a name="delete_firewall"> .</a></p>
         
         <h4 id="h3_7_4"><code>DELETE /api/firewalls/:id</code></h4>
         
-        <p>Deletes the specified <strong><em>firewall</em></strong> from the back-end cloud provider. The Deltacloud server will respond
-        with <strong>HTTP 204 No Content</strong> after a successful deletion:</p>
+        <p>Deletes the specified <strong><em>firewall</em></strong> from the back-end cloud provider. The Deltacloud
+        server will respond with <strong>HTTP 204 No Content</strong> after a successful deletion:</p>
         
         <p><code>Example request:</code></p>
         
@@ -1300,17 +1330,20 @@
         <pre><code>HTTP/1.1 204 No Content&#x000A;Date: Wed, 27 Jul 2011 09:47:43 GMT&#x000A;</code></pre>
         
         <p>The rules governing the deletion of a <strong><em>firewall</em></strong> are back-end cloud specific.
-        Since at present only the Amazon EC2 cloud supports the <strong><em>firewalls</em></strong> collection we describe the
-        <strong><em>firewall</em></strong> deletion rules for EC2 here.</p>
-        
-        <p>It is permitted to delete a <strong><em>firewall</em></strong> that has rules defined within it, with two caveats.
-        You cannot delete a  <strong><em>firewall</em></strong> if it is referenced by another <strong><em>firewall</em></strong>; for instance
-         <strong>firewall_1</strong> has a rule giving access to <strong>firewall_2</strong>. An attempt to delete
-        <strong>firewall_2</strong> will result in the error <strong>InvalidGroup.InUse</strong>, as shown in the example below. The second
-        caveat is that you cannot delete a <strong><em>firewall</em></strong> if there are currently any running <strong><em>instances</em></strong> within
-        that <strong><em>firewall</em></strong> (i.e. <strong><em>instances</em></strong> that specified the given <strong><em>firewall</em></strong> when they were launched).
-        The error message in that case is <strong>InvalidGroup.InUse: There are active instances using security group</strong>.
-        In both cases the error message is propagated from the back-end cloud provider to the requesting client:</p>
+        Since at present only the Amazon EC2 cloud supports the <strong><em>firewalls</em></strong> collection
+        we describe the <strong><em>firewall</em></strong> deletion rules for EC2 here.</p>
+        
+        <p>It is permitted to delete a <strong><em>firewall</em></strong> that has rules defined within it, with
+        two caveats. You cannot delete a  <strong><em>firewall</em></strong> if it is referenced by another
+        <strong><em>firewall</em></strong>; for instance  <strong>firewall_1</strong> has a rule giving access to
+        <strong>firewall_2</strong>. An attempt to delete <strong>firewall_2</strong> will result in the error
+        <strong>InvalidGroup.InUse</strong>, as shown in the example below. The second caveat is that
+        you cannot delete a <strong><em>firewall</em></strong> if there are currently any running <strong><em>instances</em></strong>
+        within that <strong><em>firewall</em></strong> (i.e. <strong><em>instances</em></strong> that specified the given
+        <strong><em>firewall</em></strong> when they were launched). The error message in that case is
+        <strong>InvalidGroup.InUse: There are active instances using security group</strong>. In both
+        cases the error message is propagated from the back-end cloud provider to the
+        requesting client:</p>
         
         <p><code>Example request: (error deleting a firewall referenced by another firewall)</code></p>
         
@@ -1322,17 +1355,23 @@
         
         <h4 id="h3_7_5"><code>POST /api/firewalls/:id/rules</code></h4>
         
-        <p>Create a new <strong><em>firewall rule</em></strong> within a specified <strong><em>firewall</em></strong>. A client must supply the <strong>protocol</strong>
-        (one of <em>udp</em>, <em>tcp</em> or <em>icmp</em>), <strong>port_from</strong> and <strong>port_to</strong> as parameters. Ofcourse the client must also
-        specify the <strong>sources</strong> to which the given rule is to apply. IP addresses are specified in CIDR format
-        sequentially: <em>ip_address1=192.168.10.10/24</em>, <em>ip_address2=10.1.1.1/16</em> ... <em>ip_addressN=...</em>. The IP
-        address '0.0.0.0/0' acts as a wildcard to specify <strong>any</strong> IP address.
-        Source <strong><em>firewalls</em></strong> are also specified sequentially but the <em>owner_id</em> of the <strong><em>firewall</em></strong> that is to
-         be authorized must also be supplied (this is an Amazon EC2 requirement): group1=name1,
-        group1owner=1234567890, group2=name2, group2owner=0987654321, ... groupN=nameN, groupNowner=...</p>
-        
-        <p>The Deltacloud server responds with a <strong>HTTP 201 Created</strong> after a successful operation together with the
-        details of the affected <strong><em>firewall</em></strong>:</p>
+        <p>Create a new <strong><em>firewall rule</em></strong> within a specified <strong><em>firewall</em></strong>. A client
+        must supply the <strong>protocol</strong> (one of <em>udp</em>, <em>tcp</em> or <em>icmp</em>), <strong>port_from</strong>
+        and <strong>port_to</strong> as parameters. Ofcourse the client must also specify the
+        <strong>sources</strong> to which the given rule is to apply. IP addresses are specified
+        in CIDR format sequentially: <em>ip_address1=192.168.10.10/24</em>,
+        <em>ip_address2=10.1.1.1/16</em> ... <em>ip_addressN=...</em>. The IP address '0.0.0.0/0'
+        acts as a wildcard to specify <strong>any</strong> IP address. Source <strong><em>firewalls</em></strong> are
+        also specified sequentially but the <em>owner_id</em> of the <strong><em>firewall</em></strong> that is
+        to be authorized must also be supplied (this is an Amazon EC2 requirement):
+        group1=name1, group1owner=1234567890, group2=name2, group2owner=0987654321,
+        ... groupN=nameN, groupNowner=...</p>
+        
+        <p>The Deltacloud server responds with a <strong>HTTP 201 Created</strong> after a successful
+        operation together with the details of the affected <strong><em>firewall</em></strong>. The example
+        client request below specifies the required parameters as multipart/form-data.
+        However clients may also legitimately use the application/x-www-form-urlencoded
+        to provide firewall rule parameters.</p>
         
         <p><code>Example request:</code></p>
         
@@ -1342,10 +1381,12 @@
         
         <pre><code>HTTP/1.1 201 Created&#x000A;Content-Type: application/xml&#x000A;Date: Wed, 27 Jul 2011 10:18:51 GMT&#x000A;Content-Length: 1143&#x000A;&#x000A;&lt;firewall href='http://localhost:3001/api/firewalls/default' id='default'&gt;&#x000A;  &lt;name&gt;&lt;![CDATA[default]]&gt;&lt;/name&gt;&#x000A;  &lt;description&gt;&lt;![CDATA[default group]]&gt;&lt;/description&gt;&#x000A;  &lt;owner_id&gt;393485797142&lt;/owner_id&gt;&#x000A;  &lt;rules&gt;&#x000A;    &lt;rule href='http://localhost:3001/api/firewalls/default/393485797142~tcp~22~22~@group,393485797142,devel_group,@group,393485797142,outside,@address,ipv4,192.168.1.1,24,@address,ipv4,65.128.31.27,32' id='393485797142~tcp~22~22~@group,393485797142,devel_group,@group,393485797142,outside,@address,ipv4,192.168.1.1,24,@address,ipv4,65.128.31.27,32'&gt;&#x000A;      &lt;allow_protocol&gt;tcp&lt;/allow_protocol&gt;&#x000A;      &lt;port_from&gt;22&lt;/port_from&gt;&#x000A;      &lt;port_to&gt;22&lt;/port_to&gt;&#x!
 000A;      &lt;direction&gt;ingress&lt;/direction&gt;&#x000A;      &lt;sources&gt;&#x000A;        &lt;source name='devel_group' owner='393485797142' type='group'&gt;&lt;/source&gt;&#x000A;        &lt;source name='outside' owner='393485797142' type='group'&gt;&lt;/source&gt;&#x000A;        &lt;source address='192.168.1.1' family='ipv4' prefix='24' type='address'&gt;&lt;/source&gt;&#x000A;        &lt;source address='65.128.31.27' family='ipv4' prefix='32' type='address'&gt;&lt;/source&gt;&#x000A;      &lt;/sources&gt;&#x000A;    &lt;/rule&gt;&#x000A;  &lt;/rules&gt;&#x000A;&lt;/firewall&gt;&#x000A;</code></pre>
         
+        <p><a name="delete_firewall_rule"> .</a></p>
+        
         <h4 id="h3_7_6"><code>DELETE /api/firewalls/:id/:rule_id</code></h4>
         
-        <p>Delete the specified firewall rule. The Deltacloud server will respond with <strong>HTTP 204 No Content</strong> on
-        completion of a successful delete operation:</p>
+        <p>Delete the specified firewall rule. The Deltacloud server will respond with
+        <strong>HTTP 204 No Content</strong> on completion of a successful delete operation:</p>
         
         <p><code>Example request:</code></p>
         
@@ -1367,11 +1408,12 @@
         
         <h3 id="h3_8">3.8 Addresses</h3>
         
-        <p>The <strong><em>addresses</em></strong> collection represents IP addresses and is intended to allow IP address management.
-         This collection is currently implemented for the Amazon EC2 cloud driver. For EC2, IP address management
-        corresponds to Amazon's 'Elastic IP' feature. As such, the <strong><em>addresses</em></strong> collection supports operations
-        for creating or destroying an <strong><em>address</em></strong> as well as associating or disassociating an <strong><em>address</em></strong> from
-        a running <strong><em>instance</em></strong>.</p>
+        <p>The <strong><em>addresses</em></strong> collection represents IP addresses and is intended to allow
+        IP address management. This collection is currently implemented for the Amazon
+        EC2 cloud driver. For EC2, IP address management corresponds to Amazon's
+        'Elastic IP' feature. As such, the <strong><em>addresses</em></strong> collection supports operations
+        for creating or destroying an <strong><em>address</em></strong> as well as associating or
+        disassociating an <strong><em>address</em></strong> from a running <strong><em>instance</em></strong>.</p>
         
         <h4 id="h3_8_1"><code>GET /api/addresses</code></h4>
         
@@ -1425,14 +1467,18 @@
         
         <h4 id="h3_8_5"><code>POST /api/addresses/:id/associate</code></h4>
         
-        <p>This operation associates a given <strong><em>address</em></strong> with a running <strong><em>instance</em></strong>. The client must
-        specify the <em>instance_id</em> as a parameter to this call. For Amazon EC2, the specified <strong><em>address</em></strong>
-        will replace the currently assigned <em>public_address</em> of the <strong><em>instance</em></strong>. A succesful operation will
-        produce a <strong>HTTP 202 Accepted</strong> response:</p>
+        <p>This operation associates a given <strong><em>address</em></strong> with a running <strong><em>instance</em></strong>.
+        The client must specify the <em>instance_id</em> as a parameter to this call.
+        For Amazon EC2, the specified <strong><em>address</em></strong> will replace the currently assigned
+        <em>public_address</em> of the <strong><em>instance</em></strong>. A succesful operation will produce a
+        <strong>HTTP 202 Accepted</strong> response. The example client request below specifies the
+        required  <em>instance_id</em> parameter using the application/x-www-form-urlencoded
+        content-type, however this can also legitimately be specified using
+        multipart/form-data.</p>
         
         <p><code>Example request:</code></p>
         
-        <pre><code>POST /api/addresses/107.20.232.251/associate?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 156&#x000A;Expect: 100-continue&#x000A;Content-Type: multipart/form-data; boundary=----------------------------e4c1d4718683&#x000A;&#x000A;------------------------------e4c1d4718683&#x000A;Content-Disposition: form-data; name="instance_id"&#x000A;&#x000A;i-9d8a3dfc&#x000A;------------------------------e4c1d4718683--&#x000A;</code></pre>
+        <pre><code>POST /api/addresses/107.20.232.251/associate?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 22&#x000A;Content-Type: application/x-www-form-urlencoded&#x000A;&#x000A;instance_id=i-9d8a3dfc&#x000A;</code></pre>
         
         <p><code>Server response:</code></p>
         
@@ -1463,20 +1509,23 @@
         
         <h3 id="h3_9">3.9 Load Balancers</h3>
         
-        <p><strong><em>Load balancers</em></strong> allow distribution of ingress network traffic received by a specified IP address
-        to a number of running <strong><em>instances</em></strong>. For example, a number of <strong><em>instances</em></strong> that are fulfilling the
-        role of web servers can be attached to a single <strong><em>load_balancer</em></strong>. This would allow
-        handling of large numbers of requests without degradation to the website performance.</p>
-        
-        <p>This collection is not supported by all back-end cloud providers and at present is implemented for the
-        Gogrid and Amazon EC2 cloud drivers. A <strong><em>load_balancer</em></strong> is launched into a specific <strong><em>realm</em></strong>
-        and typically only <strong><em>instances</em></strong> within that <strong><em>realm</em></strong> may be 'attached' to the balancer. Each
-        <strong><em>load_balancer</em></strong> also has a list of <strong><em>instances</em></strong>, a <strong>public address</strong> representing the IP address
-        that the balancer will respond to client requests on, a <strong>created_at</strong> timestamp and a list of
-        <strong>listeners</strong>. Each <strong>listener</strong> has a <strong>protocol</strong> (e.g., 'TCP'), a <strong>load balancer port</strong> and
-        an <strong>instance port</strong> which represent the network ports on which the balancer accepts
-        connections and the port to which network traffic is forwarded to <strong><em>instances</em></strong> in the
-        <strong>instance list</strong>, respectively.</p>
+        <p><strong><em>Load balancers</em></strong> allow distribution of ingress network traffic received by a
+         specified IP address to a number of running <strong><em>instances</em></strong>. For example, a
+        number of <strong><em>instances</em></strong> that are fulfilling the role of web servers can be
+        attached to a single <strong><em>load_balancer</em></strong>. This would allow handling of large
+        numbers of requests without degradation to the website performance.</p>
+        
+        <p>This collection is not supported by all back-end cloud providers and at present
+        is implemented for the Gogrid and Amazon EC2 cloud drivers. A
+        <strong><em>load_balancer</em></strong> is launched into a specific <strong><em>realm</em></strong> and typically only
+         <strong><em>instances</em></strong> within that <strong><em>realm</em></strong> may be 'attached' to the balancer. Each
+        <strong><em>load_balancer</em></strong> also has a list of <strong><em>instances</em></strong>, a <strong>public address</strong>
+        representing the IP address that the balancer will respond to client requests
+        on, a <strong>created_at</strong> timestamp and a list of <strong>listeners</strong>. Each <strong>listener</strong>
+        has a <strong>protocol</strong> (e.g., 'TCP'), a <strong>load balancer port</strong> and an
+        <strong>instance port</strong> which represent the network ports on which the balancer accepts
+        connections and the port to which network traffic is forwarded to <strong><em>instances</em></strong>
+        in the <strong>instance list</strong>, respectively.</p>
         
         <h4 id="h3_9_1"><code>GET /api/load_balancers</code></h4>
         
@@ -1504,16 +1553,20 @@
         
         <h4 id="h3_9_3"><code>POST /api/load_balancers</code></h4>
         
-        <p>This operation creates a new <strong><em>load_balancer</em></strong>. Clients must provide the <strong><em>load_balancer</em></strong> <strong>name</strong>,
-         the <strong>realm_id</strong> to which the balancer is to apply, a <strong>listener_protocol</strong> which the balancer will
-        respond to (one of <strong>HTTP</strong> or <strong>TCP</strong>), the <strong>listener_balancer_port</strong> which specifies the port
-        that the <strong><em>load_balancer</em></strong> will be expecting network traffic on and finally the <strong>listener_instance_port</strong>
-        which specifies the port on which <strong><em>instances</em></strong> will be receiving network traffic forwarded by the
-        <strong><em>load_balancer</em></strong>.</p>
+        <p>This operation creates a new <strong><em>load_balancer</em></strong>. Clients must provide the
+        <strong><em>load_balancer</em></strong> <strong>name</strong>, the <strong>realm_id</strong> to which the balancer is to
+        apply, a <strong>listener_protocol</strong> which the balancer will respond to (one of
+        <strong>HTTP</strong> or <strong>TCP</strong>), the <strong>listener_balancer_port</strong> which specifies the port
+        that the <strong><em>load_balancer</em></strong> will be expecting network traffic on and finally
+        the <strong>listener_instance_port</strong> which specifies the port on which <strong><em>instances</em></strong>
+        will be receiving network traffic forwarded by the <strong><em>load_balancer</em></strong>. As with
+        other operations in the Deltacloud API, parameters may be specified by a requesting
+        client using multipart/form-data or as application/x-www-form-urlencoded data
+        as shown below:</p>
         
         <p><code>Example request:</code></p>
         
-        <pre><code>POST /api/load_balancers?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 603&#x000A;Expect: 100-continue&#x000A;Content-Type: multipart/form-data; boundary=----------------------------395a7b3a9c77&#x000A;&#x000A;------------------------------395a7b3a9c77&#x000A;Content-Disposition: form-data; name="name"&#x000A;&#x000A;webtraffic-balancer&#x000A;------------------------------395a7b3a9c77&#x000A;Content-Disposition: form-data; name="realm_id"&#x000A;&#x000A;us-east-1c&#x000A;------------------------------395a7b3a9c77&#x000A;Content-Disposition: form-data; name="listener_protocol"&#x000A;&#x000A;HTTP&#x000A;------------------------------395a7b3a9c77&#x000A;Content-Disposition: form-data; name="listener_balancer_port"&#x000A;&#x000A;80&#x000A;------------------------------39!
 5a7b3a9c77&#x000A;Content-Disposition: form-data; name="listener_instance_port"&#x000A;&#x000A;3001&#x000A;------------------------------395a7b3a9c77--&#x000A;</code></pre>
+        <pre><code>POST /api/load_balancers?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 121&#x000A;Content-Type: application/x-www-form-urlencoded&#x000A;&#x000A;name=webtraffic-balancer&amp;realm_id=us-east-1c&amp;listener_protocol=HTTP&amp;&#x000A;listener_balancer_port=80&amp;listener_instance_port=3001&#x000A;</code></pre>
         
         <p><code>Server response:</code></p>
         
@@ -1534,13 +1587,16 @@
         
         <h4 id="h3_9_5"><code>POST /api/load_balancers/:id/register</code></h4>
         
-        <p>This operation registers a running <strong><em>instance</em></strong> with a specified <strong><em>load_balancer</em></strong>. Clients
-        must provide the <strong>instance_id</strong> as a parameter to the request. The Deltacloud server will respond
-        with a <strong>HTTP 204 No Content</strong> after a succesful operation:</p>
+        <p>This operation registers a running <strong><em>instance</em></strong> with a specified
+        <strong><em>load_balancer</em></strong>. Clients must provide the <strong>instance_id</strong> as a parameter
+        to the request. The Deltacloud server will respond with a <strong>HTTP 204 No Content</strong>
+        after a succesful operation. The Deltacloud server will accept client request
+        parameters encoded as multipart/form-data or as
+        application/x-www-form-urlencoded data.</p>
         
         <p><code>Example request:</code></p>
         
-        <pre><code>POST /api/load_balancers/secure-site-balancer/register?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 156&#x000A;Expect: 100-continue&#x000A;Content-Type: multipart/form-data; boundary=----------------------------6af752b909b2&#x000A;&#x000A;------------------------------6af752b909b2&#x000A;Content-Disposition: form-data; name="instance_id"&#x000A;&#x000A;i-4f06b52e&#x000A;------------------------------6af752b909b2--&#x000A;</code></pre>
+        <pre><code>POST /api/load_balancers/secure-site-balancer/register?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 22&#x000A;Content-Type: application/x-www-form-urlencoded&#x000A;&#x000A;instance_id=i-4f06b52e&#x000A;</code></pre>
         
         <p><code>Server response:</code></p>
         
@@ -1548,12 +1604,14 @@
         
         <h4 id="h3_9_6"><code>POST /api/load_balancers/:id/unregister</code></h4>
         
-        <p>This operation will unregister a specified <strong><em>instance</em></strong> from the given <strong><em>load_balancer</em></strong>. The
-        client must supply the <strong>instance_id</strong> parameter to identify the <strong><em>instance</em></strong>:</p>
+        <p>This operation will unregister a specified <strong><em>instance</em></strong> from the given
+        <strong><em>load_balancer</em></strong>. The client must supply the <strong>instance_id</strong> parameter to
+        identify the <strong><em>instance</em></strong>, either as multipart/form-data or as
+        application/x-www-form-urlencoded data (as shown below).</p>
         
         <p><code>Example request:</code></p>
         
-        <pre><code>POST /api/load_balancers/secure-site-balancer/unregister?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 156&#x000A;Expect: 100-continue&#x000A;Content-Type: multipart/form-data; boundary=----------------------------987218f60703&#x000A;&#x000A;------------------------------987218f60703&#x000A;Content-Disposition: form-data; name="instance_id"&#x000A;&#x000A;i-4f06b52e&#x000A;------------------------------987218f60703--&#x000A;</code></pre>
+        <pre><code>POST /api/load_balancers/secure-site-balancer/unregister?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 22&#x000A;Content-Type: application/x-www-form-urlencoded&#x000A;&#x000A;instance_id=i-4f06b52e&#x000A;</code></pre>
         
         <p><code>Server response:</code></p>
         
@@ -1574,17 +1632,19 @@
         <p>Storage resources are divided into two groups: <strong><em>storage volumes</em></strong> can be attached
         to a running instance (accessible by the instance OS), and <em>blob storage</em>
         which represents a generic 'key &lt;−−> value' based data store, as implemented
-        by Rackspace CloudFiles or Amazon S3. <strong><em>Storage snapshots</em></strong> represent a <strong><em>storage volume</em></strong>,
-        a backup of which is created at a particular point in time (a snapshot).</p>
+        by Rackspace CloudFiles or Amazon S3. <strong><em>Storage snapshots</em></strong> represent a
+        <strong><em>storage volume</em></strong>, a backup of which is created at a particular point in time
+        (a snapshot).</p>
         
         <h3 id="h4_1">4.1 Storage Volumes</h3>
         
-        <p>A <strong><em>storage_volume</em></strong> has a <strong>capacity</strong> expressed in Gigabytes, a <strong>created</strong> timestamp, a <strong>realm_id</strong>
-        specifying the <strong><em>realm</em></strong> in which the volume exists, a <strong>state</strong> (for Amazon EC2 this is one of
-        creating | available | in-use | deleting | deleted | error) and a set of <strong>actions</strong>. When attached to
-        an <strong><em>instance</em></strong>, a <strong><em>storage_volume</em></strong> will also expose a <strong>mount</strong> element which contains the
-        attributes <strong>instance</strong> and <strong>device</strong>, specifying the <strong><em>instance</em></strong> to which the volume is attached
-        and the mount point (e.g. /dev/sdh), respectively.</p>
+        <p>A <strong><em>storage_volume</em></strong> has a <strong>capacity</strong> expressed in Gigabytes, a <strong>created</strong>
+        timestamp, a <strong>realm_id</strong> specifying the <strong><em>realm</em></strong> in which the volume exists,
+        a <strong>state</strong> (for Amazon EC2 this is one of creating | available | in-use | deleting
+        | deleted | error) and a set of <strong>actions</strong>. When attached to an <strong><em>instance</em></strong>,
+        a <strong><em>storage_volume</em></strong> will also expose a <strong>mount</strong> element which contains the
+        attributes <strong>instance</strong> and <strong>device</strong>, specifying the <strong><em>instance</em></strong> to which
+        the volume is attached and the mount point (e.g. /dev/sdh), respectively.</p>
         
         <h4 id="h4_1_1"><code>GET /api/storage_volumes</code></h4>
         
@@ -1612,17 +1672,23 @@
         
         <h4 id="h4_1_3"><code>POST /api/storage_volumes</code></h4>
         
-        <p>This operation will create a new <strong><em>storage_volume</em></strong>. A client may specify a <strong>snapshot_id</strong> from which
-        to instantiate the <strong><em>storage_volume</em></strong> though this is optional. The <strong>capacity</strong> parameter, expressed in
-        Gigabytes, is also optional and will default to 1 Gigabyte. Finally clients may also specify the
-        <strong>realm_id</strong> as a <strong><em>storage_volume</em></strong> can typically only be attached to <strong><em>instances</em></strong> running within
-        the specified <strong><em>realm</em></strong>. If the <strong><em>realm</em></strong> is not specified it will default to the first realm returned
-         by the cloud provider. A succesful operation will return <strong>HTTP 201 Created</strong> with the details of the newly
-        created <strong><em>storage_volume</em></strong>:</p>
+        <p>This operation will create a new <strong><em>storage_volume</em></strong>. A client may specify a
+        <strong>snapshot_id</strong> from which to instantiate the <strong><em>storage_volume</em></strong> though this
+        is optional. The <strong>capacity</strong> parameter, expressed in Gigabytes, is also optional
+        and will default to 1 Gigabyte. Finally clients may also specify the <strong>realm_id</strong>
+        as a <strong><em>storage_volume</em></strong> can typically only be attached to <strong><em>instances</em></strong>
+         running within the specified <strong><em>realm</em></strong>. If the <strong><em>realm</em></strong> is not specified
+        it will default to the first realm returned by the cloud provider.
+        A succesful operation will return <strong>HTTP 201 Created</strong> with the details of
+        the newly created <strong><em>storage_volume</em></strong>.</p>
+        
+        <p>As with the other <strong>POST</strong> operations in the Deltacloud API, clients
+        may choose to specify operation parameters as multipart/form-data or
+        as application/x-www-form-urlencoded data.</p>
         
         <p><code>Example request:</code></p>
         
-        <pre><code>POST /api/storage_volumes?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 252&#x000A;Expect: 100-continue&#x000A;Content-Type: multipart/form-data; boundary=----------------------------90dea979a9f4&#x000A;&#x000A;------------------------------90dea979a9f4&#x000A;Content-Disposition: form-data; name="capacity"&#x000A;&#x000A;10&#x000A;------------------------------90dea979a9f4&#x000A;Content-Disposition: form-data; name="realm_id"&#x000A;&#x000A;us-east-1c&#x000A;------------------------------90dea979a9f4--&#x000A;</code></pre>
+        <pre><code>POST /api/storage_volumes?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 31&#x000A;Content-Type: application/x-www-form-urlencoded&#x000A;&#x000A;capacity=10&amp;realm_id=us-east-1c&#x000A;</code></pre>
         
         <p><code>Server response:</code></p>
         
@@ -1630,9 +1696,9 @@
         
         <h4 id="h4_1_4"><code>DELETE /api/storage_volumes/:id</code></h4>
         
-        <p>Deletes the specified <strong><em>storage_volume</em></strong>. The operation will return a <strong>HTTP 204 No Content</strong> after
-        a succesful operation. Note that the operation will fail if the given <strong><em>storage_volume</em></strong> is currently
-        attached to an <strong><em>instance</em></strong>.</p>
+        <p>Deletes the specified <strong><em>storage_volume</em></strong>. The operation will return a
+        <strong>HTTP 204 No Content</strong> after a succesful operation. Note that the operation will
+        fail if the given <strong><em>storage_volume</em></strong> is currently attached to an <strong><em>instance</em></strong>.</p>
         
         <p><code>Example request:</code></p>
         
@@ -1652,17 +1718,21 @@
         
         <h4 id="h4_1_5"><code>POST /api/storage_volumes/:id/attach</code></h4>
         
-        <p>This operation will attach the specified <strong><em>storage_volume</em></strong> to a running <strong><em>instance</em></strong>. Clients must
-        specify the <strong>instance_id</strong> and the <strong>device</strong> as parameters. The <strong>device</strong> parameter is used as the
-        'mount point', that is, the location at which the <strong><em>storage_volume</em></strong> will be exposed to the given
-        <strong><em>instance</em></strong> (e.g., /dev/sdh). The Deltacloud server will respond with a <strong>HTTP 202 Accepted</strong> after
-        a succesful attach operation together with details of the <strong><em>storage_volume</em></strong>. Note in the example
-         below that the <strong>state</strong> is reported as 'unknown' although the <strong>mount</strong> element is present, as the
-        processing has not yet been completed (hence the <strong>202</strong> status code).</p>
+        <p>This operation will attach the specified <strong><em>storage_volume</em></strong> to a running
+        <strong><em>instance</em></strong>. Clients must specify the <strong>instance_id</strong> and the <strong>device</strong>
+        as parameters. The <strong>device</strong> parameter is used as the 'mount point', that is,
+         the location at which the <strong><em>storage_volume</em></strong> will be exposed to the given
+        <strong><em>instance</em></strong> (e.g., /dev/sdh). The Deltacloud server will respond with a
+        <strong>HTTP 202 Accepted</strong> after a succesful attach operation together with details
+        of the <strong><em>storage_volume</em></strong>. Note in the example below that the <strong>state</strong> is
+        reported as 'unknown' although the <strong>mount</strong> element is present, as the
+        processing has not yet been completed (hence the <strong>202</strong> status code).
+        Clients may specify the required parameters as multipart/form-data
+        or as application/x-www-form-urlencoded data.</p>
         
         <p><code>Example request:</code></p>
         
-        <pre><code>POST /api/storage_volumes/vol-0bc0de60/attach?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 259&#x000A;Expect: 100-continue&#x000A;Content-Type: multipart/form-data; boundary=----------------------------5a074e9c5fcc&#x000A;&#x000A;------------------------------5a074e9c5fcc&#x000A;Content-Disposition: form-data; name="instance_id"&#x000A;&#x000A;i-b100b3d0&#x000A;------------------------------5a074e9c5fcc&#x000A;Content-Disposition: form-data; name="device"&#x000A;&#x000A;/dev/sdi&#x000A;------------------------------5a074e9c5fcc--&#x000A;</code></pre>
+        <pre><code>POST /api/storage_volumes/vol-0bc0de60/attach?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 38&#x000A;Content-Type: application/x-www-form-urlencoded&#x000A;&#x000A;instance_id=i-b100b3d0&amp;device=/dev/sdi&#x000A;</code></pre>
         
         <p><code>Server response:</code></p>
         
@@ -1670,11 +1740,12 @@
         
         <h4 id="h4_1_6"><code>POST /api/storage_volumes/:id/detach</code></h4>
         
-        <p>This operation detaches the given <strong><em>storage_volume</em></strong> from the <strong><em>instance</em></strong> to which it is currently
-        attached. A succesful operation will return <strong>HTTP 201 Accepted</strong> together with details of the
-        <strong><em>storage_volume</em></strong>. Note in the example that like the <strong><em>attach</em></strong> operation above, <strong>state</strong> is
-         reported as 'unknown' and the <strong>mount</strong> element is still present as the processing has not yet been
-        completed (hence the <strong>202</strong> status code).</p>
+        <p>This operation detaches the given <strong><em>storage_volume</em></strong> from the <strong><em>instance</em></strong>
+        to which it is currently attached. A succesful operation will return
+        <strong>HTTP 201 Accepted</strong> together with details of the <strong><em>storage_volume</em></strong>. Note
+        in the example that like the <strong><em>attach</em></strong> operation above, <strong>state</strong> is
+         reported as 'unknown' and the <strong>mount</strong> element is still present as the
+        processing has not yet been completed (hence the <strong>202</strong> status code).</p>
         
         <p><code>Example request:</code></p>
         
@@ -1696,15 +1767,16 @@
         
         <h3 id="h4_2">4.2 Storage Snapshots</h3>
         
-        <p>A <strong><em>storage_snapshot</em></strong> captures the point-in-time state of a <strong><em>storage_volume</em></strong>. Each snapshot has
-        a <strong>created</strong> timestamp, and a <strong><em>storage_volume</em></strong> attribute referring to the volume from which the
-        snapshot was made.</p>
+        <p>A <strong><em>storage_snapshot</em></strong> captures the point-in-time state of a <strong><em>storage_volume</em></strong>.
+        Each snapshot has a <strong>created</strong> timestamp, and a <strong><em>storage_volume</em></strong> attribute
+        referring to the volume from which the snapshot was made.</p>
         
         <h4 id="h4_2_1"><code>GET /api/storage_snapshots</code></h4>
         
-        <p>List all available <strong><em>storage snapshots</em></strong>. For Amazon EC2 this list includes <em>any</em> snapshots that
-        are available to the requesting client account, including those that may not have been created by that
-        account. As this list is very long the example below shows only part of the response:</p>
+        <p>List all available <strong><em>storage snapshots</em></strong>. For Amazon EC2 this list includes
+        <em>any</em> snapshots that are available to the requesting client account, including
+        those that may not have been created by that account. As this list is very long
+        the example below shows only part of the response:</p>
         
         <p><code>Example request:</code></p>
         
@@ -1728,14 +1800,16 @@
         
         <h4 id="h4_2_3"><code>POST /api/storage_snapshots</code></h4>
         
-        <p>This operation will create a new <strong><em>storage_snapshot</em></strong>. Clients must specify the <strong><em>storage_volume</em></strong>
-        from which the snapshot is to be created, by supplying the <strong>volume_id</strong> parameter. The Deltacloud
-        server responds with <strong>HTTP 201 Created</strong> after a succesful operation and provides details of the
-        newly created <strong><em>storage_snapshot</em></strong>:</p>
+        <p>This operation will create a new <strong><em>storage_snapshot</em></strong>. Clients must specify
+        the <strong><em>storage_volume</em></strong> from which the snapshot is to be created, by supplying
+        the <strong>volume_id</strong> parameter. The Deltacloud server responds with
+        <strong>HTTP 201 Created</strong> after a succesful operation and provides details of the
+        newly created <strong><em>storage_snapshot</em></strong>. Clients may specify operation parameters as
+        multipart/form-data, or as application/x-www-form-urlencoded data:</p>
         
         <p><code>Example request:</code></p>
         
-        <pre><code>POST /api/storage_snapshots?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 156&#x000A;Expect: 100-continue&#x000A;Content-Type: multipart/form-data; boundary=----------------------------91f7fa88be76&#x000A;&#x000A;------------------------------91f7fa88be76&#x000A;Content-Disposition: form-data; name="volume_id"&#x000A;&#x000A;vol-99fbe5f2&#x000A;------------------------------91f7fa88be76--&#x000A;</code></pre>
+        <pre><code>POST /api/storage_snapshots?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu)&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 22&#x000A;Content-Type: application/x-www-form-urlencoded&#x000A;&#x000A;volume_id=vol-99fbe5f2&#x000A;</code></pre>
         
         <p><code>Server response:</code></p>
         
@@ -1743,8 +1817,8 @@
         
         <h4 id="h4_2_4"><code>DELETE /api/storage_snapshots/:id</code></h4>
         
-        <p>Deletes the specified <strong><em>storage_snapshot</em></strong>. The operation returns a <strong>HTTP 204 No Content</strong> after a
-        succesful operation:</p>
+        <p>Deletes the specified <strong><em>storage_snapshot</em></strong>. The operation returns a
+        <strong>HTTP 204 No Content</strong> after a succesful operation:</p>
         
         <p><code>Example request:</code></p>
         
@@ -1809,28 +1883,32 @@
         
         <h4 id="h4_3_3"><code>POST /api/buckets</code></h4>
         
-        <p>Creates a new <strong><em>bucket</em></strong> and requires that you specify the <strong><em>name</em></strong> as a parameter,
-        in the form of multipart/form-data (i.e., HTTP form field). Optionally for Amazon S3
-        buckets, you can specify a bucket location with the <strong><em>location</em></strong> parameter, as per
+        <p>Creates a new <strong><em>bucket</em></strong> and requires that you specify the <strong><em>name</em></strong> as a
+        parameter. Optionally for Amazon S3 buckets, you can specify a bucket location
+        with the <strong><em>location</em></strong> parameter, as per
          <a href="http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html" title="AWS Regions and Endpoints">Regions and Endpoints for Amazon Simple Storage Service</a>;
         valid values for S3 bucket <em>location</em> parameter are: "us-west-1", "EU",
         "ap-southeast-1", "ap-northeast-1" (while not specifying a location defaults to
-        the "US Standard" region).</p>
+        the "US Standard" region). Note that clients may specify parameters as
+        multipart/form-data or using a content-type of application/x-www-form-urlencoded.</p>
         
-        <p>On succesful creation this call will return a <strong><em>201</em></strong> HTTP status, specifying the URI
-        of the newly created bucket in the <strong>Location</strong> header and the newly created
-        <strong><em>bucket</em></strong> object in the response message body. The example request below creates a
-        new <strong><em>bucket</em></strong> in the <em>EU (Ireland)</em> region. If the given backend cloud does not
-        support locations then the <em>location</em> parameter is silently ignored.</p>
+        <p>On succesful creation this call will return a <strong><em>201</em></strong> HTTP status, specifying
+        the URI of the newly created bucket in the <strong>Location</strong> header and the newly
+        created <strong><em>bucket</em></strong> object in the response message body. The example request
+        below creates a new <strong><em>bucket</em></strong> in the <em>EU (Ireland)</em> region. If the given
+        backend cloud does not support locations then the <em>location</em> parameter is
+        silently ignored.</p>
         
         <p><code>Example request:</code></p>
         
-        <pre><code>POST /api/buckets?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 252&#x000A;Content-Type: multipart/form-data; boundary=----------------------------4e90611c39f2&#x000A;&#x000A;------------------------------4e90611c39f2&#x000A;Content-Disposition: form-data; name="name"&#x000A;&#x000A;mybucketeurope&#x000A;------------------------------4e90611c39f2&#x000A;Content-Disposition: form-data; name="location"&#x000A;&#x000A;EU&#x000A;------------------------------4e90611c39f2--&#x000A;</code></pre>
+        <pre><code>POST /api/buckets?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1&#x000A;Host: localhost:3001&#x000A;Accept: */*&#x000A;Content-Length: 31&#x000A;Content-Type: application/x-www-form-urlencoded&#x000A;&#x000A;name=mybucketeurope&amp;location=EU&#x000A;</code></pre>
         
         <p><code>Server response:</code></p>
         
         <pre><code>HTTP/1.1 201 Created&#x000A;Location: http://localhost:3001/api/buckets/mybucketeurope&#x000A;Content-Type: application/xml&#x000A;Content-Length: 182&#x000A;&#x000A;&lt;?xml version='1.0' encoding='utf-8' ?&gt;&#x000A;&lt;bucket href='http://localhost:3001/api/buckets/mybucketeurope' id='mybucketeurope'&gt;&#x000A;  &lt;name&gt;mybucketeurope&lt;/name&gt;&#x000A;  &lt;size&gt;0&lt;/size&gt;&#x000A;&lt;/bucket&gt;&#x000A;</code></pre>
         
+        <p><a name="delete_bucket">.</a></p>
+        
         <h4 id="h4_3_4"><code>DELETE /api/buckets/:id</code></h4>
         
         <p>Deletes the specified <strong><em>bucket</em></strong>, which must be empty (otherwise the call will
@@ -1875,6 +1953,8 @@
         
         <pre><code>HTTP/1.1 200 OK&#x000A;Content-Disposition: attachment; filename=Im_a_blob_beholdme&#x000A;Content-Type: text/plain&#x000A;Content-Length: 50&#x000A;&#x000A;&lt;BLOB DATA HERE&gt;&#x000A;</code></pre>
         
+        <p><a name="create_blob">.</a></p>
+        
         <h4 id="h4_3_7"><code>PUT /api/buckets/:bucket_id/:blob_id</code></h4>
         
         <p>Creates a <strong><em>blob</em></strong> object and sets its content. If the <strong><em>blob</em></strong> already exists then
@@ -1905,8 +1985,8 @@
         updating a <strong><em>blob</em></strong> object. As with the <code>PUT</code> method for creating/updating a
         <strong><em>blob</em></strong>, the client must specify the <strong><em>bucket</em></strong> in which the <strong><em>blob</em></strong> is to
         be created through the call URI (i.e. you <code>POST</code> to the specified <strong><em>bucket</em></strong>).
-        The rest of the required fields, that is, the <strong><em>blob_id</em></strong> (name of the blob),
-        the  <strong><em>blob_data</em></strong> and the <strong><em>content-length</em></strong> are specified by the client as
+        The rest of the required fields, that is, the name of the <strong><em>blob</em></strong>, the
+         <strong><em>blob_data</em></strong> and the <strong><em>content-length</em></strong> are specified by the client as
         <strong><em>multipart/form-data</em></strong> (i.e. in <code>HTTP POST</code> form fields).</p>
         
         <p>In order to specify the optional user metadata for a given <strong><em>blob</em></strong> the client
@@ -1927,7 +2007,7 @@
         
         <p><code>Example request:</code></p>
         
-        <pre><code>POST /api/buckets/mybucket?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu) libcurl/7.20.1 N&#x000A;Accept: */*&#x000A;Content-Length: 113584&#x000A;Expect: 100-continue&#x000A;Content-Type: multipart/form-data; boundary=----------------------------517f5f2df858&#x000A;&#x000A;------------------------------517f5f2df858&#x000A;Content-Disposition: form-data; name="blob_id"&#x000A;&#x000A;12Jul2011blob&#x000A;------------------------------517f5f2df858&#x000A;Content-Disposition: form-data; name="blob_data"; filename="small.txt"&#x000A;Content-Type: text/plain&#x000A;&#x000A;&lt;THE_BLOB_DATA_HERE&gt;&#x000A;&#x000A;------------------------------517f5f2df858&#x000A;Content-Disposition: form-data; name="meta_params"&#x000A;&#x000A;2&#x000A;------------------------------517f5f2df858&#x000A;Content-Disposition: form-data; name="meta_name1"&#x000A;&!
 #x000A;author&#x000A;------------------------------517f5f2df858&#x000A;Content-Disposition: form-data; name="meta_value1"&#x000A;jjs&#x000A;------------------------------517f5f2df858&#x000A;Content-Disposition: form-data; name="meta_name2"&#x000A;&#x000A;version&#x000A;------------------------------517f5f2df858&#x000A;Content-Disposition: form-data; name="meta_value2"&#x000A;&#x000A;2.2&#x000A;------------------------------517f5f2df858--&#x000A;</code></pre>
+        <pre><code>POST /api/buckets/mybucket?format=xml HTTP/1.1&#x000A;Authorization: Basic AU1J3UB2121Afd1DdyQWxLaTYTmJMNF4zTXBoRGdhMDh2RUw5ZDAN9zVXVa==&#x000A;User-Agent: curl/7.20.1 (i386-redhat-linux-gnu) libcurl/7.20.1 N&#x000A;Accept: */*&#x000A;Content-Length: 113582&#x000A;Expect: 100-continue&#x000A;Content-Type: multipart/form-data; boundary=----------------------------517f5f2df858&#x000A;&#x000A;------------------------------517f5f2df858&#x000A;Content-Disposition: form-data; name="blob"&#x000A;&#x000A;12Jul2011blob&#x000A;------------------------------517f5f2df858&#x000A;Content-Disposition: form-data; name="blob_data"; filename="small.txt"&#x000A;Content-Type: text/plain&#x000A;&#x000A;&lt;THE_BLOB_DATA_HERE&gt;&#x000A;&#x000A;------------------------------517f5f2df858&#x000A;Content-Disposition: form-data; name="meta_params"&#x000A;&#x000A;2&#x000A;------------------------------517f5f2df858&#x000A;Content-Disposition: form-data; name="meta_name1"&#x000A;&#x0!
 00A;author&#x000A;------------------------------517f5f2df858&#x000A;Content-Disposition: form-data; name="meta_value1"&#x000A;jjs&#x000A;------------------------------517f5f2df858&#x000A;Content-Disposition: form-data; name="meta_name2"&#x000A;&#x000A;version&#x000A;------------------------------517f5f2df858&#x000A;Content-Disposition: form-data; name="meta_value2"&#x000A;&#x000A;2.2&#x000A;------------------------------517f5f2df858--&#x000A;</code></pre>
         
         <p><code>Server response:</code></p>
         
-- 
1.7.3.4


Mime
View raw message