The way you are getting the field description is Ok:
/services/data/v29.0/sobjects/account/describe
If you check in the official doc you'll see
nillable boolean Indicates whether the field is nillable (true) or not
(false). A nillable field can have empty content. A non-nillable field
must have a value in order for the object to be created or saved.
I've checked Account.Name and nillable seems to be Ok:
"name" : "Account",
"fields" : [ {
...
"name" : "Name",
"nillable" : false,
Also, I've tried two custom fields an the result are Ok:
...
"name" : "TestReq__c",
"nillable" : false,
...
"name" : "TestNoReq__c",
"nillable" : true,
Are you sure that your API response are getting the wrong value? Are you working with PersonAccounts?
Updated
In addition (By reading Jonathan answer) I notice, you could also check if the pageLayout using the same REST API:
/services/data/v29.0/sobjects/Account/describe/layouts
You will get there the layouts for that object where will find the layoutItem
object which contains the require
attr.
However, I think that you are trying to insert/update data through API and hence those security controls are expected to be omitted
Best Answer
You can generate a WSDL file for your org by going to Setup->Build->Develop->API and click on 'Generate Enterprise WSDL'. The Enterprise WSDL will contain your full schema in xsd structure.
For the REST API, you don't need to use the WSDL. You can explore the API by going to https://{instance}.salesforce.com/services/data/v24.0
For an interactive explorer, check out apigee's salesforce console: https://apigee.com/console/salesforce
Fetching the WSDL/XSD schema from the REST API is not possible by my knowledge.