API · Platform · Templates
List templates.
List the Matter-authored templates generateDocument can render against entity state. Filter by kind (the Document.type value the template produces), category (formation | financing | commercial | governance | tax), availability (preview | ga | deprecated | retired — defaults to ga only when omitted), and attachable_to (parent template_id, for picking attachable children like Pro Rata Side Letters). Cursor-paginated.
The v1 catalog ships 22 governance-category templates covering the board-and-stockholder consent surface — the Day-0 organizational consent, officer/director-change cascades, substance-specialized manage-phase and exit-phase board consents, a board-side general catch-all, and stockholder-side parallels for the actions that statutorily require both. The catalog is sourced from the x-matter-template-catalog block at the top level of this spec. Other categories (formation, financing, commercial, tax) ingest through separate workstreams.
Last updated
Query Parameters
kindstringOptionalThe Document.type value to filter by (e.g. safe,
bylaws). Multiple templates can share the same kind
(variants).
categorystringOptional"formation""financing""commercial""governance""tax"availabilitystringOptionalFilter by availability. When omitted, the list returns ga
and preview templates only — revisions superseded by a
catalog re-ingest (deprecated) or withdrawn (retired)
stay out of the default listing but remain reachable with
an explicit filter, and documents rendered from them keep
re-rendering against their pinned revision.
"preview""ga""deprecated""retired"attachable_tostringOptionalFilter to templates that can attach to a given parent
template_id. Useful for picking children in attachment
grammars (Pro Rata Side Letter → SAFE, MFN amendment → SAFE,
DPA/SLA/BAA → CSA).
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
Request
curl -X GET "https://api.mattermode.com/v1/templates"fetch("https://api.mattermode.com/v1/templates", { method: "GET"})package mainimport ( "fmt" "net/http" "io/ioutil")func main() { url := "https://api.mattermode.com/v1/templates" req, _ := http.NewRequest("GET", url, nil) res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := ioutil.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body))}import requestsheaders = { "Authorization": "Bearer sk_test_4eC39HqLyjWDarjtT1zdp7dc", "Matter-Version": "2026-06-10",}resp = requests.get( "https://api.mattermode.com/v1/templates", headers=headers,)resp.raise_for_status()print(resp.json())import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.net.http.HttpResponse.BodyHandlers;import java.time.Duration;HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .build();HttpRequest.Builder requestBuilder = HttpRequest.newBuilder() .uri(URI.create("https://api.mattermode.com/v1/templates")) .GET() .build();try { HttpResponse<String> response = client.send(requestBuilder.build(), BodyHandlers.ofString()); System.out.println("Status code: " + response.statusCode()); System.out.println("Response body: " + response.body());} catch (Exception e) { e.printStackTrace();}using System;using System.Net.Http;using System.Text;var client = new HttpClient();var response = await client.GetAsync("https://api.mattermode.com/v1/templates");var responseBody = await response.Content.ReadAsStringAsync();curl --request GET 'https://api.mattermode.com/v1/templates' \ --header 'Authorization: Bearer sk_test_4eC39HqLyjWDarjtT1zdp7dc' \ --header 'Matter-Version: 2026-06-10'const response = await fetch("https://api.mattermode.com/v1/templates", { method: "GET", headers: { "Authorization": "Bearer sk_test_4eC39HqLyjWDarjtT1zdp7dc", "Matter-Version": "2026-06-10", },});if (!response.ok) { throw new Error(`Matter API ${response.status}: ${await response.text()}`);}const data = await response.json();console.log(data);Response
application/json{
"object": "list",
"has_more": true,
"url": "/v1/entities",
"next_cursor": "cur_PqB5fG7K",
"data": [
{
"object": "template",
"template_id": "string",
"name": "string",
"kind": "string",
"category": "formation",
"version": "string",
"availability": "preview",
"successor_template_id": "string",
"cover_page_field_schema": {},
"attachable_to": [
"string"
]
}
]
}{
"type": "https://mattermode.com/docs/errors/invalid_request",
"title": "Invalid request",
"status": 400,
"code": "invalid_request",
"detail": "Request body could not be parsed as JSON.",
"doc_url": "https://mattermode.com/docs/guides/errors#invalid_request",
"request_id": "req_Qw9xYz8A"
}{
"type": "https://mattermode.com/docs/errors/authentication_required",
"title": "Authentication required",
"status": 401,
"code": "authentication_required",
"detail": "No bearer token was supplied. Pass `Authorization: Bearer sk_live_...` on every request.",
"doc_url": "https://mattermode.com/docs/guides/errors#authentication_required",
"request_id": "req_Qw9xYz8A"
}{
"type": "https://mattermode.com/docs/errors/rate_limit_exceeded",
"title": "Rate limit exceeded",
"status": 429,
"code": "rate_limit_exceeded",
"detail": "Request rate exceeded for this key. Retry after `retry_after` seconds or honor the `Retry-After` header.",
"doc_url": "https://mattermode.com/docs/guides/errors#rate_limit_exceeded",
"request_id": "req_Qw9xYz8A",
"retry_after": 30
}