TrieOH
IdentityXAPIProjects

Upsert a project's email template override

Saves the project's override for one kind. The body is a Go template rendered with the same variables as the built-in defaults: `ActionURL`, `ProjectName`, `Expiry`, `ProjectDomain`, `Email`. The body must reference `{{.ActionURL}}` at least once (the actionable link always comes from IdentityX) and must render; violations are rejected with 422-style validation errors. The authenticated actor must be an admin or owner of the project.

PUT/projects/{project_id}/email-templates/{kind}

Saves the project's override for one kind. The body is a Go template rendered with the same variables as the built-in defaults: ActionURL, ProjectName, Expiry, ProjectDomain, Email. The body must reference {{.ActionURL}} at least once (the actionable link always comes from IdentityX) and must render; violations are rejected with 422-style validation errors. The authenticated actor must be an admin or owner of the project.

Authorization

AuthorizationBearer <token>

JWT issued by IdentityX, signed with Ed25519

In: header

Path Parameters

project_id*string

Project ID.

kind*string

Email template kind.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Request body for PUT /projects/{project_id}/email-templates/{kind}.

Response Body

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

curl -X PUT "https://example.com/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/email-templates/verify" \  -H "Content-Type: application/json" \  -d '{    "subject": "Welcome to Acme — confirm your email",    "body": "<p>Hi there!</p>\\n<p><a href=\\"{{.ActionURL}}\\">Confirm my email</a></p>\\n"  }'
{
  "kind": "verify",
  "subject": "string",
  "body": "string",
  "source": "default"
}
{
  "detail": "string",
  "instance": "../dictionary",
  "errors": [
    {
      "field": "string",
      "message": "string"
    }
  ],
  "type": "http://example.com",
  "status": 400,
  "title": "Validation Failed"
}
{
  "detail": "string",
  "instance": "../dictionary",
  "errors": [
    {
      "field": "string",
      "message": "string"
    }
  ],
  "type": "http://example.com",
  "status": 401,
  "title": "Unauthenticated"
}
{
  "detail": "string",
  "instance": "../dictionary",
  "errors": [
    {
      "field": "string",
      "message": "string"
    }
  ],
  "type": "http://example.com",
  "status": 403,
  "title": "Insufficient Role"
}
{
  "detail": "string",
  "instance": "../dictionary",
  "errors": [
    {
      "field": "string",
      "message": "string"
    }
  ],
  "type": "http://example.com",
  "status": 404,
  "title": "Not Found"
}
{
  "detail": "string",
  "instance": "../dictionary",
  "errors": [
    {
      "field": "string",
      "message": "string"
    }
  ],
  "type": "http://example.com",
  "status": 500,
  "title": "Internal Server Error"
}
{
  "detail": "string",
  "instance": "../dictionary",
  "errors": [
    {
      "field": "string",
      "message": "string"
    }
  ],
  "type": "http://example.com",
  "status": 503,
  "title": "Identity Unavailable"
}