Newer Version Available

This content describes an older version of this product. View Latest

Using Tooling REST API

Resources

Use REST API if you’re using a language that isn’t strongly typed, like JavaScript. The REST Tooling API can be used just like the Force.com REST API; for details on usage, syntax, and authentication, see the Force.com REST API Developer's Guide.

This section lists supported REST resources in Tooling API.

The base URI for each Tooling REST API resource is http://domain/services/data/vXX.X/tooling/ where domain is a Salesforce instance or a custom domain and vXX.X is the API version number. For example: http://na1.salesforce.com/services/data/v28.0/tooling/

Like the Force.com REST API, Tooling API uses the following resources.

URI Supported Methods Description

/completions?type=

GET

Retrieves available code completions of the referenced type. Currently only supports Apex system method symbols (type=apex). Available from API version 28.0 or later.

/executeAnonymous/?anonymousBody= <url encoded body>

GET

Executes Apex code anonymously. Available from API version 29.0 or later.

/query/?q=

GET

Executes a query against a Tooling API object and returns data that matches the specified criteria.

If the query results are too large, the response contains the first batch of results and a query identifier. The identifier can be used in an additional request to retrieve the next batch.

/runTestsAsynchronous/?classids= <comma separated list of class IDs>

and

/runTestsSynchronous/?classnames= <comma separated list of class names>

GET

Executes the tests in the specified classes. Running tests asynchronously allows methods to process in parallel, cutting down your test run times.

/sobjects/

GET

Lists the available Tooling API objects and their metadata.

/sobjects/SObjectName/

GET

POST

Describes the individual metadata for the specified object or creates a new record for a given object.

For example, use the GET method to retrieve the metadata for the ApexExecutionOverlayAction object. Use the POST method to create a new ApexExecutionOverlayAction object.

/sobjects/SObjectName/describe/

GET

Completely describes the individual metadata at all levels for the specified object.

For example, use this resource to retrieve the fields, URLs, and child relationships for a Tooling API object.

/sobjects/SObjectName/id/

GET

PATCH

DELETE

Accesses records based on the specified object ID.

Use the GET method to retrieve records or fields, the DELETE method to delete records, and the PATCH method to update records.

/sobjects/ApexLog/id/Body/

GET

Retrieves a raw debug log by ID. Available from API version 28.0 or later.

Examples

The following examples use Apex to execute REST requests, but you can use any standard REST tool to access Tooling REST API.

Salesforce runs on multiple server instances. The examples in this guide use the na1 instance. The instance your organization uses might be different.

Note

First, set up the connection to your org and the HTTP request type:
1HttpRequest req = new HttpRequest();
2req.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionID());
3req.setHeader('Content-Type', 'application/json');
At the end of each request (examples below), add the following code to send the request and retrieve the body of the response:
1Http h = new Http();
2HttpResponse res = h.send(req);
3system.debug(res.getBody());
To get a description of all available objects in Tooling API:
1req.setEndpoint('http://na1.salesforce.com/services/data/v28.0/tooling/sobjects/');
2req.setMethod('GET');
To get a description of a specific Tooling API object, for example TraceFlag:
1req.setEndpoint('http://na1.salesforce.com/services/data/v28.0/tooling/sobjects/
2TraceFlag/');
3req.setMethod('GET');
To get a description of all the metadata for a specific Tooling API object, for example TraceFlag:
1req.setEndpoint('http://na1.salesforce.com/services/data/v28.0/tooling/sobjects/
2TraceFlag/describe/');
3req.setMethod('GET');
To create a new Tooling API object, for example MetadataContainer:
1req.setEndpoint('http://na1.salesforce.com/services/data/v28.0/tooling/sobjects/
2MetadataContainer/');
3req.setBody('{"Name":"TestContainer"}');
4req.setMethod('POST');

Use the ID from this call in the rest of the examples.

Tip

To retrieve a Tooling API object by ID, for example MetadataContainer:
1req.setEndpoint('http://na1.salesforce.com/services/data/v28.0/tooling/sobjects/
2MetadataContainer/ + containerID + '/'); 
3req.setMethod('GET');
To update a Tooling API object by ID, for example MetadataContainer:
1req.setEndpoint('http://na1.salesforce.com/services/data/v28.0/tooling/sobjects/
2MetadataContainer/ + containerID + '/');
3req.setBody('{"Name":"NewlyNamedContainer"}');
4req.setMethod('PATCH');
To query a Tooling API object by ID, for example MetadataContainer:
1req.setEndpoint('http://na1.salesforce.com/services/data/v28.0/tooling/query/?q=
2Select+id,Name+from+MetadataContainer+Where+ID=\'' + containerID +  '\'');
3req.setMethod('GET');
Or to query an object within a MetadataContainer:
1req.setEndpoint('http://na1.salesforce.com/services/data/v28.0/tooling/query/?q=
2Select+id,Body,LastSyncDate,Metadata+from+ApexClassMember+Where+MetadataContainerID=\' 
3+ containerID +  '\'');
4req.setMethod('GET');
To check on the status of a deployment, using ContainerAsyncRequest:
1req.setEndpoint('http://na1.salesforce.com/services/data/v28.0/tooling/sobjects/
2ContainerAsyncRequest/' + requestID + '/');
3req.setMethod('GET');

To execute anonymous Apex:

1req.setEndpoint('http://na1.salesforce.com/services/data/v28.0/tooling/executeAnonymous/?
2anonymousBody=System.debug('Test')%3B');
3req.setMethod('GET');