> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trylath.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Every Lath operation is POST https://platform.trylath.com/<operation name with dots replaced by slashes>, with a JSON body and `Authorization: Bearer <key>`. `email.send` is POST /email/send.
> Branch on `error.code`, never on `error.message`. Every refusal also carries `error.fix`, which names the next step.
> Send an `Idempotency-Key` header on any operation that is not retry-safe, so a retry cannot run it twice.
> A `lath_test_` key emails only the account's own members and sends no SMS; a `lath_live_` key reaches real recipients and is billed.
> The OpenAPI document, generated from the same registry as the routes, is at https://platform.trylath.com/openapi.json.

# sms.settings.set

> Changes SMS settings for this environment; keys not mentioned are left alone. Quiet hours hold marketing texts until the window opens in the recipient's local time rather than dropping them; times are 24-hour HH:MM and the window may wrap midnight, and setting timezone to null clears it, which stops marketing sends while quiet hours are enabled. keywordReplies set what Lath texts back to STOP, HELP and START — null for each means Lath says nothing, which is the default because the carrier answers these itself unless its own automatic opt-out handling is turned off. Setting one without turning that off sends the person two replies. {{project}} is the only variable, and a reply is billed as the segment it is.



## OpenAPI

````yaml /api-reference/openapi.json post /sms/settings/set
openapi: 3.1.0
info:
  title: Lath API
  version: 0.1.0
  description: >-
    Every operation is one POST. The same set is reachable over MCP, the SDK and
    the CLI; nothing is dashboard-only.
servers:
  - url: https://platform.trylath.com
    description: This deployment
security: []
paths:
  /sms/settings/set:
    post:
      tags:
        - sms
      summary: sms.settings.set
      description: >-
        Changes SMS settings for this environment; keys not mentioned are left
        alone. Quiet hours hold marketing texts until the window opens in the
        recipient's local time rather than dropping them; times are 24-hour
        HH:MM and the window may wrap midnight, and setting timezone to null
        clears it, which stops marketing sends while quiet hours are enabled.
        keywordReplies set what Lath texts back to STOP, HELP and START — null
        for each means Lath says nothing, which is the default because the
        carrier answers these itself unless its own automatic opt-out handling
        is turned off. Setting one without turning that off sends the person two
        replies. {{project}} is the only variable, and a reply is billed as the
        segment it is.
      operationId: sms.settings.set
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
          description: >-
            Replays the stored response for the same key and input; refuses
            different input.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $schema: https://json-schema.org/draft/2020-12/schema
              type: object
              properties:
                quietHours:
                  type: object
                  properties:
                    enabled:
                      type: boolean
                    start:
                      description: When quiet begins, local 24-hour HH:MM, e.g. 21:00
                      type: string
                    end:
                      description: When quiet ends, local 24-hour HH:MM, e.g. 08:00
                      type: string
                    timezone:
                      description: >-
                        IANA zone for contacts whose own is unknown, e.g.
                        America/Los_Angeles. null clears it, which stops
                        marketing sends while quiet hours are on.
                      type:
                        - string
                        - 'null'
                  additionalProperties: false
                keywordReplies:
                  type: object
                  properties:
                    stop:
                      anyOf:
                        - type: string
                          maxLength: 300
                        - type: 'null'
                    help:
                      anyOf:
                        - type: string
                          maxLength: 300
                        - type: 'null'
                    start:
                      anyOf:
                        - type: string
                          maxLength: 300
                        - type: 'null'
                  additionalProperties: false
              additionalProperties: false
      responses:
        '200':
          description: '{ activityId, result }. activityId is empty for reads.'
          content:
            application/json:
              schema:
                type: object
                properties:
                  activityId:
                    type: string
                    description: The activity this call created, or empty for a read.
                  result:
                    $schema: https://json-schema.org/draft/2020-12/schema
                    type: object
                    properties:
                      settings:
                        type: object
                        properties:
                          quietHours:
                            type: object
                            properties:
                              enabled:
                                type: boolean
                              start:
                                type: string
                              end:
                                type: string
                              timezone:
                                type:
                                  - string
                                  - 'null'
                            required:
                              - enabled
                              - start
                              - end
                              - timezone
                            additionalProperties: {}
                          keywordReplies:
                            type: object
                            properties:
                              stop:
                                type:
                                  - string
                                  - 'null'
                              help:
                                type:
                                  - string
                                  - 'null'
                              start:
                                type:
                                  - string
                                  - 'null'
                            required:
                              - stop
                              - help
                              - start
                            additionalProperties: {}
                        required:
                          - quietHours
                          - keywordReplies
                        additionalProperties: {}
                      updatedAt:
                        type: string
                        format: date-time
                        pattern: >-
                          ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
                    required:
                      - settings
                      - updatedAt
                    additionalProperties: {}
                required:
                  - activityId
                  - result
        '400':
          description: invalid_input or invalid_json
        '401':
          description: unauthenticated
        '403':
          description: forbidden
        '404':
          description: not_found
        '409':
          description: 'conflict: idempotency_mismatch, email_taken, last_key'
        '413':
          description: body_too_large
        '429':
          description: rate_limited
      security:
        - bearer: []
components:
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: >-
        A Lath API key: lath_live_sk… or lath_test_sk… on a server,
        lath_live_pk… or lath_test_pk… in a browser.

````