API · Create · Governance
Create an indemnification agreement.
Issue a director-and-officer indemnification agreement. The agreement promises that the corporation will indemnify the named indemnitee and advance expenses to the maximum extent permitted by DGCL §145 (or the analogous statute in the entity's state of incorporation). Standard governance hygiene for every Delaware C-Corp; angel-stage investor counsel typically requires it as a formation-packet completeness item.
Solo-director case. When the same natural person is both sole director (indemnitee) and sole officer (company signatory), pass the same stakeholder_id for both indemnitee_stakeholder_id and company_signatory_stakeholder_id. Set signing_capacity_indemnitee: natural_person and signing_capacity_company: sole_officer_slate (or the actual officer title) so the audit trail records which signature represents which legal capacity. DGCL §145(g) protections rely on the indemnitee having signed in their personal capacity.
Requires a prior board (or sole-director consent) Resolution authorising the form of agreement; pass it as authorizing_resolution_id. The Document emitted on completion carries the same id; the Resolution gains a forward-reference entry in authorizes_agreements[] automatically.
Last updated
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
indemnitee_stakeholder_idstringRequiredThe natural person (or, rarely, entity) being indemnified.
Must currently hold a director or officer role on the
entity.
company_signatory_stakeholder_idstringRequiredWho signs on behalf of the corporation. Must hold an
officer role with signing authority. May equal
indemnitee_stakeholder_id in solo-director cases.
signing_capacity_indemniteestringRequiredThe legal capacity in which the indemnitee signs.
natural_person is the canonical case. entity_indemnitee
handles unusual structures (an entity holding a director
seat through a representative) — rarely used.
"natural_person""entity_indemnitee"signing_capacity_companystringRequiredThe corporate office under which the company signatory
signs. sole_officer_slate is the catch-all for a solo
founder holding President + Treasurer + Secretary
simultaneously. president_and_secretary is the classic
two-officer attestation pattern.
"president""chief_executive_officer""secretary""treasurer""chair_of_the_board""president_and_secretary""sole_officer_slate"authorizing_resolution_idstringRequiredBoard (or sole-director written consent) Resolution that
approved the form of agreement. The resulting Document
carries this id as authorizing_resolution_id; the
Resolution gains a forward-reference entry in
authorizes_agreements[] automatically.
template_idstringOptionalRegistry template id (e.g., a future
matter:director_indemnification_agreement:2026-04-26).
Null for documents with provenance of
counterpart_received or user_uploaded. The template
registry ships empty per the
api/conventions/templates policy; the Director
Indemnification Agreement is a planned Matter-authored
template.
advance_expensesbooleanOptionalWhether the entity undertakes to advance defense expenses to the indemnitee per DGCL §145(e), subject to the standard repayment undertaking if it is ultimately determined the indemnitee was not entitled to indemnification. Industry default is true.
scopestringOptionalCoverage scope. maximum_dgcl_145 indemnifies to the
statutory maximum (the standard NVCA form).
bylaws_baseline_only covers only what the bylaws already
require (an unusual choice — typically used when the
entity wants to avoid expanding coverage beyond what's
already mandatory). custom requires template_id to
point to a custom-uploaded form.
"maximum_dgcl_145""bylaws_baseline_only""custom"effective_datestring<date>OptionalWhen the agreement becomes operative. Often backdated to the indemnitee's first day in their director / officer role; backdating beyond actual execution may be limited by §145(j) waiver rules in some jurisdictions.
metadataobjectOptionalFlat string-to-string map. Up to 50 keys. Keys: max 40 chars, charset
[A-Za-z0-9_\\-.]. Values: max 500 chars. Keys prefixed matter_ are reserved
for platform use. Metadata is retrievable but not filterable via query params.
Response Body
application/json
application/problem+json
application/problem+json
Request
curl -X POST "https://api.mattermode.com/v1/entities/{id}/indemnification_agreements" \ -H "Content-Type: application/json" \ -d '{ "indemnitee_stakeholder_id": "stk_tomas", "company_signatory_stakeholder_id": "stk_tomas", "signing_capacity_indemnitee": "natural_person", "signing_capacity_company": "sole_officer_slate", "authorizing_resolution_id": "res_LqGcSdRb", "template_id": null, "advance_expenses": true, "scope": "maximum_dgcl_145", "effective_date": "2026-05-01" }'const body = JSON.stringify({ "indemnitee_stakeholder_id": "stk_tomas", "company_signatory_stakeholder_id": "stk_tomas", "signing_capacity_indemnitee": "natural_person", "signing_capacity_company": "sole_officer_slate", "authorizing_resolution_id": "res_LqGcSdRb", "template_id": null, "advance_expenses": true, "scope": "maximum_dgcl_145", "effective_date": "2026-05-01"})fetch("https://api.mattermode.com/v1/entities/{id}/indemnification_agreements", { method: "POST", headers: { "Content-Type": "application/json" }, body})package mainimport ( "fmt" "net/http" "io/ioutil" "strings")func main() { url := "https://api.mattermode.com/v1/entities/{id}/indemnification_agreements" body := strings.NewReader(`{ "indemnitee_stakeholder_id": "stk_tomas", "company_signatory_stakeholder_id": "stk_tomas", "signing_capacity_indemnitee": "natural_person", "signing_capacity_company": "sole_officer_slate", "authorizing_resolution_id": "res_LqGcSdRb", "template_id": null, "advance_expenses": true, "scope": "maximum_dgcl_145", "effective_date": "2026-05-01" }`) req, _ := http.NewRequest("POST", url, body) req.Header.Add("Content-Type", "application/json") 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", "Idempotency-Key": "ee7c3a9b-3f1a-4d8e-9b2a-7c5e1f0a2d4b",}payload = { "indemnitee_stakeholder_id": "stk_tomas", "company_signatory_stakeholder_id": "stk_tomas", "signing_capacity_indemnitee": "natural_person", "signing_capacity_company": "sole_officer_slate", "authorizing_resolution_id": "res_LqGcSdRb", "template_id": null, "advance_expenses": true, "scope": "maximum_dgcl_145", "effective_date": "2026-05-01"}resp = requests.post( "https://api.mattermode.com/v1/entities/ent_Nq3KcAbc/indemnification_agreements", headers=headers, json=payload,)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;import java.net.http.HttpRequest.BodyPublishers;var body = BodyPublishers.ofString("""{ "indemnitee_stakeholder_id": "stk_tomas", "company_signatory_stakeholder_id": "stk_tomas", "signing_capacity_indemnitee": "natural_person", "signing_capacity_company": "sole_officer_slate", "authorizing_resolution_id": "res_LqGcSdRb", "template_id": null, "advance_expenses": true, "scope": "maximum_dgcl_145", "effective_date": "2026-05-01"}""");HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .build();HttpRequest.Builder requestBuilder = HttpRequest.newBuilder() .uri(URI.create("https://api.mattermode.com/v1/entities/{id}/indemnification_agreements")) .header("Content-Type", "application/json") .POST(body) .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 body = new StringContent("""{ "indemnitee_stakeholder_id": "stk_tomas", "company_signatory_stakeholder_id": "stk_tomas", "signing_capacity_indemnitee": "natural_person", "signing_capacity_company": "sole_officer_slate", "authorizing_resolution_id": "res_LqGcSdRb", "template_id": null, "advance_expenses": true, "scope": "maximum_dgcl_145", "effective_date": "2026-05-01"}""", Encoding.UTF8, "application/json");var client = new HttpClient();var response = await client.PostAsync("https://api.mattermode.com/v1/entities/{id}/indemnification_agreements", body);var responseBody = await response.Content.ReadAsStringAsync();curl --request POST 'https://api.mattermode.com/v1/entities/ent_Nq3KcAbc/indemnification_agreements' \ --header 'Authorization: Bearer sk_test_4eC39HqLyjWDarjtT1zdp7dc' \ --header 'Matter-Version: 2026-06-10' \ --header 'Idempotency-Key: ee7c3a9b-3f1a-4d8e-9b2a-7c5e1f0a2d4b' \ --header 'Content-Type: application/json' \ --data '{ "indemnitee_stakeholder_id": "stk_tomas", "company_signatory_stakeholder_id": "stk_tomas", "signing_capacity_indemnitee": "natural_person", "signing_capacity_company": "sole_officer_slate", "authorizing_resolution_id": "res_LqGcSdRb", "template_id": null, "advance_expenses": true, "scope": "maximum_dgcl_145", "effective_date": "2026-05-01"}'const response = await fetch("https://api.mattermode.com/v1/entities/ent_Nq3KcAbc/indemnification_agreements", { method: "POST", headers: { "Authorization": "Bearer sk_test_4eC39HqLyjWDarjtT1zdp7dc", "Matter-Version": "2026-06-10", "Idempotency-Key": "ee7c3a9b-3f1a-4d8e-9b2a-7c5e1f0a2d4b", "Content-Type": "application/json", }, body: JSON.stringify({ "indemnitee_stakeholder_id": "stk_tomas", "company_signatory_stakeholder_id": "stk_tomas", "signing_capacity_indemnitee": "natural_person", "signing_capacity_company": "sole_officer_slate", "authorizing_resolution_id": "res_LqGcSdRb", "template_id": null, "advance_expenses": true, "scope": "maximum_dgcl_145", "effective_date": "2026-05-01" }),});if (!response.ok) { throw new Error(`Matter API ${response.status}: ${await response.text()}`);}const data = await response.json();console.log(data);Response
application/json{
"id": "string",
"object": "indemnification_agreement",
"entity_id": "string",
"indemnitee_stakeholder_id": "string",
"role": "director",
"authorizing_resolution_id": "string",
"document_id": "string",
"envelope_id": "string",
"effective_date": "2019-08-24",
"termination_date": "2019-08-24",
"coverage": {
"advancement_of_expenses": true,
"includes_attorneys_fees": true,
"scope": "mandatory",
"change_of_control_acceleration": false,
"d_and_o_insurance_required": false,
"d_and_o_minimum_coverage_cents": 0
},
"status": "draft",
"signed_at": 0,
"terminated_at": 0,
"termination_reason": null,
"carve_outs": [
{
"category": "scope_carveout",
"cap_amount_cents": 0,
"survival_period_months": 0,
"basket_amount_cents": 0,
"disclosed_schedule_id": "string",
"status": "active",
"release_document_id": "string",
"release_resolution_id": "string",
"released_at": "2019-08-24T14:15:22Z"
}
],
"metadata": {
"customer_id": "cus_7Hpx9WxY",
"portfolio_tag": "y-combinator-w26"
},
"created": 0,
"updated": 0,
"livemode": true
}{
"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/invalid_state_transition",
"title": "Invalid state transition",
"status": 409,
"code": "invalid_state_transition",
"detail": "Entity ent_Nq3KcAbc is in state `dissolved`; `dissolve` is not a valid transition.",
"doc_url": "https://mattermode.com/docs/guides/errors#invalid_state_transition",
"request_id": "req_Qw9xYz8A",
"current_state": "dissolved",
"attempted_transition": "dissolve",
"allowed_transitions": []
}{
"type": "https://mattermode.com/docs/errors/dissolution_prerequisites_missing",
"title": "Dissolution prerequisites missing",
"status": 409,
"code": "dissolution_prerequisites_missing",
"detail": "Voluntary dissolution requires `board_resolution_id` and `stockholder_consent_id`, or `auto_generate_resolutions: true`.",
"doc_url": "https://mattermode.com/docs/guides/errors#dissolution_prerequisites_missing",
"request_id": "req_Qw9xYz8A"
}{
"type": "https://mattermode.com/docs/errors/valuation_stale",
"title": "409A valuation stale",
"status": 409,
"code": "valuation_stale",
"detail": "Active 409A val_AbCd1234 is older than 12 months or superseded by a material event. Issuing ISOs at the prior strike risks IRC §409A violation. Refresh via POST /entities/{id}/valuations/{id}/refresh_request.",
"doc_url": "https://mattermode.com/docs/guides/errors#valuation_stale",
"request_id": "req_Qw9xYz8A"
}