> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://api-docs.hindsiteind.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://api-docs.hindsiteind.com/_mcp/server.

# Get Work Order Templates

GET https://app.hindsiteind.com/api/v2/work_order_templates

Lists the work order templates the caller can access, ten per page and active ones by default, where admins see every template in the organisation and other users see templates shared with their locations or groups.

Reference: https://api-docs.hindsiteind.com/hindsite-api/work-order-templates/get-work-order-templates

## Authentication

- `Authorization` header (bearer token, required) — OAuth 2.0 Client Credentials Flow. To obtain an access token: 1. Request API credentials from HINDSITE support to receive your `client_id` and `client_secret` 2. Make a POST request to obtain an access token: ``` POST https://app.hindsiteind.com/oauth/token Content-Type: application/x-www-form-urlencoded grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET ``` 3. The response will contain your access token: ```json { "access_token": "your_access_token_here", "token_type": "Bearer", "expires_in": 7200, "created_at": 1234567890 } ``` 4. Include the token in subsequent API requests: ``` Authorization: Bearer your_access_token_here ```

## Request

### Query parameters

- `search` (string, optional) — Only return templates whose title matches this text.
- `location_ids[]` (list of string, optional) — Only return templates shared with these locations. Repeat the parameter to pass several IDs, e.g. `location_ids[]=A&location_ids[]=B`.
- `archived` (boolean, optional) — Pass `true` to list archived templates instead of active ones.
- `page` (integer, optional, default: 1) — Page number, starting at 1. Each page holds up to 10 templates.

## Response

### 200

get WorkOrderTemplate(s)

- `results` (list of WorkOrderTemplate, optional)
- `next_page` (integer, optional) — Next page number, or null if no more pages

## Errors

### 400 Bad Request Error

`location_ids` is not an array, or `archived` or `page` is not the right type

- `error` (string, optional)

## Types

### WorkOrderTemplate

- `id` (string, optional) — ULID
- `title` (string, optional)
- `description` (string, optional) — Empty string when the template has no description
- `template` (boolean, optional) — Always true; distinguishes a template from a work order (whose `template` is false)
- `location_ids` (list of string, optional) — Locations the template is shared with
- `asset_id` (string, optional, nullable) — ULID. null when the template has no asset.
- `participant_ids` (list of string, optional) — Users added as participants to work orders created from the template
- `created_at` (long, optional) — Unix timestamp (seconds since epoch)
- `updated_at` (long, optional) — Unix timestamp (seconds since epoch)

## Examples

**Response**

```json
{
  "results": [
    {
      "id": "string",
      "title": "string",
      "description": "string",
      "template": true,
      "location_ids": [
        "string"
      ],
      "asset_id": "string",
      "participant_ids": [
        "string"
      ],
      "created_at": 1,
      "updated_at": 1
    }
  ],
  "next_page": 1
}
```

**SDK Code**

```python
import requests

url = "https://app.hindsiteind.com/api/v2/work_order_templates"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://app.hindsiteind.com/api/v2/work_order_templates';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://app.hindsiteind.com/api/v2/work_order_templates"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://app.hindsiteind.com/api/v2/work_order_templates")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://app.hindsiteind.com/api/v2/work_order_templates")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://app.hindsiteind.com/api/v2/work_order_templates', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://app.hindsiteind.com/api/v2/work_order_templates");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://app.hindsiteind.com/api/v2/work_order_templates")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```