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

# Get template

> Get a single template by ID, including the full workflow definition with placeholders



## OpenAPI

````yaml /openapi/openapi.yaml get /templates/{templateId}
openapi: 3.0.3
info:
  title: Annie API
  description: >
    ### Overview


    The Annie API is a (mostly) RESTful API. Typically, both POST bodies and
    responses are JSON-encoded.


    Note: The documenation is Work In Progress and is subject to change.


    ### Base URL


    The base URL for the Annie API is https://api.helloannie.com/.


    Examples in this document may abbreviate this to `/`.


    ### Versioning


    Routes are prefixed with a version number i.e. `v1`. The version will change
    when there is a non-backwards compatible or other significant change to the
    api.


    ### Authentication


    The Annie API supports two authentication methods API Keys and OAuth Access
    Tokens:


    #### API Keys


    API Keys are long-lived tokens that can be generated from the Developer
    Portal on your organization page. API keys are prefixed with `annie-sk-v2-`
    and can be used directly in the `Authorization` header.


    ```

    curl -H "Authorization: Bearer annie-sk-xxxxx"
    https://api.helloannie.com/...

    ```


    #### OAuth Tokens


    OAuth tokens are short-lived access tokens generated using the OAuth 2.0
    Client Credentials flow (Machine-to-Machine). OAuth clients provide scoped
    permissions and are ideal for server-to-server integrations.


    **Creating an OAuth Client**


    OAuth clients can be created in the Developer Portal on your organization
    page. When creating a client, you'll receive:


    - `client_id`: Your OAuth client identifier

    - `client_secret`: Your OAuth client secret (store this securely)


    **Generating an OAuth Token**


    To generate an OAuth access token, make a POST request to the Annie OAuth
    token endpoint:


    **Endpoint:** `https://annie-external-api.us.auth0.com/oauth/token`


    **Example Request:**


    ```bash

    curl -X POST https://annie-external-api.us.auth0.com/oauth/token \
      -H "Content-Type: application/json" \
      -d '{
        "grant_type": "client_credentials",
        "client_id": "your-client-id",
        "client_secret": "your-client-secret",
        "audience": "https://api.helloannie.com"
      }'
    ```


    The `access_token` from the response should be used in the `Authorization`
    header when making requests to the Annie API:


    ```

    curl -H "Authorization: Bearer eyJhbGciOiJSUzI..."
    https://api.helloannie.com/v1/...

    ```


    ### API Response Structure


    The Annie API returns status codes consistent with standard HTTP
    conventions. Success and Error responses follow the below structure:


    ```

    {
      "success": boolean
      "data": {}
      "message": string // optional
    }

    ```


    ### Rate Limiting


    The Annie API enforces rate limits to ensure stability and fair usage. The
    default rate limit is **60 requests per minute** per organization. This
    limit is applied per endpoint pattern (e.g. `GET /v1/bots/:id`).


    When the rate limit is exceeded, the API responds with HTTP `429 Too Many
    Requests`.


    Response headers include:


    - `X-RateLimit-Limit`: The maximum number of requests allowed in the current
    window.

    - `X-RateLimit-Remaining`: The number of requests remaining in the current
    window.

    - `X-RateLimit-Reset`: The time at which the current rate limit window
    resets (in UTC epoch seconds).


    If you exceed the limit, the response will contain a `Retry-After` header
    indicating how many seconds to wait before retrying.


    ### Pagination


    The Annie API does not currently support pagination. All results are
    returned at once.
  version: v1
servers:
  - url: https://api.helloannie.com/v1
security: []
paths:
  /templates/{templateId}:
    get:
      tags:
        - Templates
      summary: Get template
      description: >-
        Get a single template by ID, including the full workflow definition with
        placeholders
      operationId: getV1TemplatesByTemplateId
      parameters:
        - name: templateId
          in: path
          required: true
          schema:
            format: uuid
            type: string
      responses:
        '200':
          description: Response containing a single template with its workflow definition
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateDetailResponse'
        '403':
          description: You do not have permission to perform this action
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
        '404':
          description: The requested resource was not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
components:
  schemas:
    TemplateDetailResponse:
      additionalProperties: false
      type: object
      required:
        - success
        - data
      properties:
        success:
          enum:
            - true
          type: boolean
        data:
          additionalProperties: false
          type: object
          required:
            - id
            - name
            - description
            - version
            - createdAt
            - variables
            - workflow
          properties:
            id:
              format: uuid
              type: string
            name:
              type: string
            description:
              type: string
              nullable: true
            version:
              description: Template version, incremented when workflow changes
              type: number
            createdAt:
              description: ISO timestamp
              type: string
            variables:
              description: All variables are required when applying the template
              type: array
              items:
                type: object
                required:
                  - name
                  - type
                  - description
                properties:
                  name:
                    type: string
                  type:
                    type: string
                    enum:
                      - STRING
                      - PHONE_NUMBER
                  description:
                    type: string
                    nullable: true
            workflow:
              additionalProperties: false
              type: object
              required:
                - title
                - description
                - steps
              properties:
                title:
                  minLength: 1
                  description: Title of the workflow
                  type: string
                description:
                  description: Optional description of the workflow
                  type: string
                  nullable: true
                enabled:
                  default: true
                  description: Whether the workflow is enabled
                  type: boolean
                usageContext:
                  description: Context describing when this workflow should be used
                  type: string
                  nullable: true
                order:
                  default: 0
                  description: Order of the workflow
                  type: number
                steps:
                  description: Steps in the workflow
                  type: array
                  items:
                    type: object
                    required:
                      - title
                      - description
                      - instructions
                      - order
                    properties:
                      title:
                        minLength: 1
                        description: Title of the step
                        type: string
                      description:
                        description: Optional description of the step
                        type: string
                        nullable: true
                      instructions:
                        minLength: 1
                        description: Instructions for the step
                        type: string
                      examples:
                        description: Example phrases for the step
                        type: array
                        items:
                          type: string
                      order:
                        minimum: 0
                        description: Order of the step within its parent
                        type: number
                      action:
                        description: Action tool name (e.g., SEND_TEXT, TRANSFER_CALL)
                        type: string
                      actionMetadata:
                        description: >-
                          Metadata for supported actions. TRANSFER_CALL uses
                          inline destination fields in exported workflows and
                          templates.
                        anyOf:
                          - additionalProperties: false
                            description: Metadata for the SEND_TEXT action.
                            type: object
                            required:
                              - templateName
                              - templateBody
                            properties:
                              templateName:
                                minLength: 1
                                description: >-
                                  Template name for SEND_TEXT or SEND_EMAIL
                                  actions. May include {{variable}}
                                  placeholders.
                                example: Appointment Confirmation
                                type: string
                              templateBody:
                                minLength: 1
                                description: >-
                                  Template body for SEND_TEXT or SEND_EMAIL
                                  actions. May include {{variable}}
                                  placeholders.
                                example: >-
                                  Your appointment is scheduled for tomorrow at
                                  3 PM.
                                type: string
                            title: SEND_TEXT
                          - additionalProperties: false
                            description: Metadata for the SEND_EMAIL action.
                            type: object
                            required:
                              - templateName
                              - templateBody
                            properties:
                              templateName:
                                minLength: 1
                                description: >-
                                  Template name for SEND_TEXT or SEND_EMAIL
                                  actions. May include {{variable}}
                                  placeholders.
                                example: Appointment Reminder Email
                                type: string
                              templateBody:
                                minLength: 1
                                description: >-
                                  Template body for SEND_TEXT or SEND_EMAIL
                                  actions. May include {{variable}}
                                  placeholders.
                                example: >-
                                  This is a reminder that your appointment is
                                  tomorrow at 3 PM.
                                type: string
                              templateSubject:
                                minLength: 1
                                description: >-
                                  Optional email subject for SEND_EMAIL actions.
                                  May include {{variable}} placeholders.
                                example: Your Upcoming Appointment
                                type: string
                            title: SEND_EMAIL
                          - additionalProperties: false
                            description: >-
                              TRANSFER_CALL (inline) — provide name,
                              phoneNumber, and optional extension directly.
                            type: object
                            required:
                              - name
                              - phoneNumber
                            properties:
                              name:
                                minLength: 1
                                description: >-
                                  Display name for the transfer destination. May
                                  include {{variable}} placeholders.
                                example: Front Desk
                                type: string
                              phoneNumber:
                                minLength: 1
                                description: >-
                                  Phone number to transfer to in E.164 format
                                  (for example, +15551234567). May include
                                  {{variable}} placeholders.
                                example: '+15551234567'
                                type: string
                              extension:
                                minLength: 1
                                description: >-
                                  Optional extension to dial after the transfer
                                  connects. Supports DTMF characters 0-9, *, #,
                                  A-D, w, W. You may also use {{variable}}
                                  placeholders; after resolution, the final
                                  extension must be 1-20 DTMF characters.
                                example: '123'
                                type: string
                            title: TRANSFER_CALL (inline)
                      childSteps:
                        type: array
                        items:
                          type: object
                          required:
                            - title
                            - description
                            - instructions
                            - order
                          properties:
                            title:
                              minLength: 1
                              description: Title of the step
                              type: string
                            description:
                              description: Optional description of the step
                              type: string
                              nullable: true
                            instructions:
                              minLength: 1
                              description: Instructions for the step
                              type: string
                            examples:
                              description: Example phrases for the step
                              type: array
                              items:
                                type: string
                            order:
                              minimum: 0
                              description: Order of the step within its parent
                              type: number
                            action:
                              description: >-
                                Action tool name (e.g., SEND_TEXT,
                                TRANSFER_CALL)
                              type: string
                            actionMetadata:
                              description: >-
                                Metadata for supported actions. TRANSFER_CALL
                                uses inline destination fields in exported
                                workflows and templates.
                              anyOf:
                                - additionalProperties: false
                                  description: Metadata for the SEND_TEXT action.
                                  type: object
                                  required:
                                    - templateName
                                    - templateBody
                                  properties:
                                    templateName:
                                      minLength: 1
                                      description: >-
                                        Template name for SEND_TEXT or
                                        SEND_EMAIL actions. May include
                                        {{variable}} placeholders.
                                      example: Appointment Confirmation
                                      type: string
                                    templateBody:
                                      minLength: 1
                                      description: >-
                                        Template body for SEND_TEXT or
                                        SEND_EMAIL actions. May include
                                        {{variable}} placeholders.
                                      example: >-
                                        Your appointment is scheduled for
                                        tomorrow at 3 PM.
                                      type: string
                                  title: SEND_TEXT
                                - additionalProperties: false
                                  description: Metadata for the SEND_EMAIL action.
                                  type: object
                                  required:
                                    - templateName
                                    - templateBody
                                  properties:
                                    templateName:
                                      minLength: 1
                                      description: >-
                                        Template name for SEND_TEXT or
                                        SEND_EMAIL actions. May include
                                        {{variable}} placeholders.
                                      example: Appointment Reminder Email
                                      type: string
                                    templateBody:
                                      minLength: 1
                                      description: >-
                                        Template body for SEND_TEXT or
                                        SEND_EMAIL actions. May include
                                        {{variable}} placeholders.
                                      example: >-
                                        This is a reminder that your appointment
                                        is tomorrow at 3 PM.
                                      type: string
                                    templateSubject:
                                      minLength: 1
                                      description: >-
                                        Optional email subject for SEND_EMAIL
                                        actions. May include {{variable}}
                                        placeholders.
                                      example: Your Upcoming Appointment
                                      type: string
                                  title: SEND_EMAIL
                                - additionalProperties: false
                                  description: >-
                                    TRANSFER_CALL (inline) — provide name,
                                    phoneNumber, and optional extension
                                    directly.
                                  type: object
                                  required:
                                    - name
                                    - phoneNumber
                                  properties:
                                    name:
                                      minLength: 1
                                      description: >-
                                        Display name for the transfer
                                        destination. May include {{variable}}
                                        placeholders.
                                      example: Front Desk
                                      type: string
                                    phoneNumber:
                                      minLength: 1
                                      description: >-
                                        Phone number to transfer to in E.164
                                        format (for example, +15551234567). May
                                        include {{variable}} placeholders.
                                      example: '+15551234567'
                                      type: string
                                    extension:
                                      minLength: 1
                                      description: >-
                                        Optional extension to dial after the
                                        transfer connects. Supports DTMF
                                        characters 0-9, *, #, A-D, w, W. You may
                                        also use {{variable}} placeholders;
                                        after resolution, the final extension
                                        must be 1-20 DTMF characters.
                                      example: '123'
                                      type: string
                                  title: TRANSFER_CALL (inline)
    ForbiddenResponse:
      additionalProperties: false
      type: object
      required:
        - success
        - data
        - message
      properties:
        success:
          enum:
            - false
          type: boolean
        data:
          additionalProperties: false
          type: object
          properties: {}
        message:
          type: string
    NotFoundResponse:
      additionalProperties: false
      type: object
      required:
        - success
        - data
        - message
      properties:
        success:
          enum:
            - false
          type: boolean
        data:
          additionalProperties: false
          type: object
          properties: {}
        message:
          type: string

````