I am new to salesforce development. I wonder what is the correct rest api if I want to get a standard object by using a field instead of id? For example, if I want to get a contact record by id, I try below command:

curl https://cs10.salesforce.com/services/data/v33.0/sobjects/Contact/Id/003J000001CxKKsIAN -H "Authorization: Bearer myAccessToken" -H "Content-Type: application/json" -X GET

(I know Node "Id" could be omitted) it returns as expected:


However, if I want to retrieve this record by account id:

curl https://cs10.salesforce.com/services/data/v33.0/sobjects/Contact/AccountId/001J000001bXQZHIA4 -H "Authorization: Bearer myAccessToken" -H "Content-Type: application/json" -X GET

it returns error:

[{"errorCode":"NOT_FOUND","message":"Provided external ID field does not exist or is not accessible: AccountId"}]

What is the correct example for my case?

1 Answer 1


You can do that only if you are using a External Id, AccountId is not. What you can do it to make a simple query (doc):


  • so, you mean, if the query element is not the primary key or external id, I should use query instead of a rest call like mine, right?
    – Phoenix
    Jun 2, 2015 at 22:56
  • That's right, otherwise you can create your own apex rest api, but then it will requires more development on salesforce side.
    – brovasi
    Jun 2, 2015 at 22:58
  • Same to do update action, right? I mean, I also need write my own sql to execute an update if I want to update the record by one of its field (instead of external id), right?
    – Phoenix
    Jun 2, 2015 at 23:00
  • If external Id, you could update straight away your contact without its id. If you are using another field than an external id, you will need to make 2 calls, the first one to GET the record contact and its id, then another one to update(POST) the contact using the id.
    – brovasi
    Jun 2, 2015 at 23:04

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .