Nooks Sequencing API

The Nooks Sequencing API (also published as the "Nooks External API") provides programmatic access to sequences, sequence steps, sequence states (enrollments), prospects, accounts, notes, tasks, calls, call dispositions, emails, email templates, mailboxes, and users created in the Nooks Sales Engagement Platform. It is an OpenAPI 3.1.0 contract with 37 operations across 30 paths, cursor pagination (`page[size]`, `page[after]`/`page[before]`), inline expansion via `include`, per-endpoint per-minute rate limits with `X-RateLimit-*` headers, and a signed `call.logged` webhook.

Documentation

Specifications

Other Resources

OpenAPI Specification

nooks-sequencing-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Nooks Sequencing API
  version: 0.1.0
  description: |
    The Nooks Sequencing API provides programmatic access to manage sequences, tasks, templates, and prospect engagement workflows created using the Nooks SEP.

    ## Authentication

    Send a bearer token in the `Authorization` header:
    ```
    Authorization: Bearer <token>
    ```

    Two token types are accepted on the same header — the API detects which
    format you sent and validates accordingly. If you already have a token,
    paste it into the Authentication panel and skip the flow setup.

    ### API keys

    Long-lived, workspace-scoped. Best for backend integrations and
    server-to-server automation. Generate one from **Developer Settings →
    API Keys** in your Nooks workspace. API keys are prefixed `nooks-api-`
    and have full read/write access within the owning workspace.

    ### OAuth 2.0 access tokens

    Short-lived (1 hour), user-scoped, scope-limited JWTs issued by
    `https://oauth.nooks.in` via the standard authorization-code + PKCE flow.
    Best for third-party apps acting on behalf of a specific user — the token
    carries that user's identity and a subset of scopes the user consented
    to. Refresh tokens rotate every 90 days and are invalidated on first
    re-use (refresh-token reuse detection).

    **Endpoints:**

    - Authorize: `https://oauth.nooks.in/oauth/authorize`
    - Token: `https://oauth.nooks.in/oauth/token`
    - JWKS: `https://oauth.nooks.in/.well-known/jwks.json`
    - Server metadata (RFC 8414): `https://oauth.nooks.in/.well-known/oauth-authorization-server`

    **Available scopes:**

    | Scope | Grants |
    | --- | --- |
    | `prospects:read` | View your prospects |
    | `prospects:write` | Create and update prospects |
    | `sequences:read` | View your sequences |
    | `sequences:write` | Create and update sequences |
    | `sequence-steps:read` | View sequence steps |
    | `sequence-states:read` | View sequence enrollments |
    | `sequence-states:write` | Enroll prospects and manage enrollments |
    | `tasks:read` | View your tasks |
    | `tasks:write` | Create, update, complete, skip, and delete tasks |
    | `calls:read` | View your calls |
    | `calls:write` | Create and update calls |
    | `call-dispositions:read` | View call dispositions |
    | `emails:read` | View your emails |
    | `emails:write` | Create and update emails |
    | `mailboxes:read` | View connected mailboxes |
    | `users:read` | View users in your workspace |
    | `accounts:read` | View accounts (companies) in your workspace |
    | `notes:write` | Create notes on CRM-backed prospects and accounts |
    | `opportunities:read` | View opportunities (deals) in your workspace |
    | `search:read` | Search across your prospects, accounts, and other records |

    ## Rate Limiting
    API requests are rate limited per workspace and per endpoint in a fixed
    one-minute window. Separate endpoint buckets do not share quota, except
    routes without an explicit limit use the shared default bucket.

    Every response includes these headers:
    - `X-RateLimit-Limit` -- maximum requests allowed in the current per-minute window
    - `X-RateLimit-Remaining` -- requests remaining in the current window
    - `X-RateLimit-Reset` -- seconds until the current window resets

    When the limit is exceeded the API returns `429 Too Many Requests` with a
    `Retry-After` header indicating how many seconds to wait before retrying.

    **Current limits:**

    | Endpoint class | Methods | Limit |
    | --- | --- | --- |
    | List reads: `/sequences`, `/emails`, `/users`, `/sequenceStates`, `/prospects`, `/mailboxes`, `/calls`, `/sequenceSteps`, `/callDispositions`, `/tasks`, `/accounts` | `GET` | 300 requests/minute per endpoint |
    | Read by ID: `/sequences/{id}`, `/emails/{id}`, `/users/{id}`, `/sequenceStates/{id}`, `/prospects/{id}`, `/mailboxes/{id}`, `/calls/{id}`, `/sequenceSteps/{id}`, `/callDispositions/{id}`, `/tasks/{id}`, `/accounts/{id}`, `/emailTemplate/{id}` | `GET` | 600 requests/minute per endpoint |
    | Sequence writes: `/sequences`, `/sequences/{id}` | `POST`, `PATCH` | 120 requests/minute per endpoint |
    | Sequence state writes: `/sequenceStates`, `/sequenceStates/{id}`, `/sequenceStates/{id}/actions/finish` | `POST`, `DELETE` | 120 requests/minute per endpoint |
    | Task writes: `/tasks`, `/tasks/{id}`, `/tasks/{id}/complete`, `/tasks/{id}/skip` | `POST`, `PATCH`, `DELETE` | 120 requests/minute per endpoint |
    | CRM note writes: `/prospects/{id}/notes`, `/accounts/{id}/notes` | `POST` | 30 requests/minute per endpoint |
    | `/integrations/prospects/sync` | `POST` | 10 requests/minute |
    | Any other endpoint | Any | 30 requests/minute, shared default bucket |

    ## Pagination
    List endpoints support cursor-based pagination using the `page[size]` and `page[after]`/`page[before]` query parameters.
    - Maximum page size: 100
    - Default page size: 50

    ## Include (Inline Expansion)
    Most GET endpoints support an `include` query parameter that expands related `ReferenceObject` fields inline,
    eliminating the need for follow-up API calls.

    **Format:** `?include=field1,field2` (comma-separated field names)

    **Without include:**
    ```json
    GET /v1/prospects/123

    {
      "id": "123",
      "sequenceStates": [
        { "id": "ss-1", "_href": "/v1/sequenceStates/ss-1" }
      ]
    }
    ```

    **With `include=sequenceStates`:**
    ```json
    GET /v1/prospects/123?include=sequenceStates

    {
      "id": "123",
      "sequenceStates": [
        {
          "id": "ss-1",
          "_href": "/v1/sequenceStates/ss-1",
          "state": "active",
          "sequence": { "id": "seq-1", "_href": "/v1/sequences/seq-1" },
          "prospect": { "id": "123", "_href": "/v1/prospects/123" },
          "creator": { "id": "u-1", "_href": "/v1/users/u-1" },
          "sequenceStep": null,
          "createdAt": "2024-01-01T00:00:00Z",
          "updatedAt": "2024-01-01T00:00:00Z"
        }
      ]
    }
    ```

    The expanded object is a superset of `ReferenceObject` — it keeps `id` and `_href` and adds all DTO fields.
    The response shape is unchanged; the field just contains richer data.

    **Hard constraints (enforced with 400 errors):**
    - **Max 3 includes per request.** Requesting more than 3 comma-separated values returns `400: "include accepts at most 3 values"`.
    - **GET endpoints only.** POST, PATCH, and DELETE endpoints do not accept `include`.
    - **No nested includes.** Only top-level field names are valid (e.g., `sequenceStates`). Dot-notation like `sequenceStates.prospect` returns 400.
    - **`account` on Prospect is not includable.** Requesting `include=account` returns 400.

    Each endpoint's `include` parameter lists the valid field names for that resource.

  contact:
    name: Nooks API Support
    email: support@nooks.in
    url: https://www.nooks.in
  license:
    name: Proprietary
  x-logo:
    url: ./nooks-logo.svg
    altText: Nooks Logo
    href: https://www.nooks.ai

servers:
  - url: https://partner-api.nooks.in/v1
    description: Production API

tags:
  - name: Sequences
    description: Manage sales sequences
  - name: Emails
    description: Access email records
  - name: Users
    description: Manage workspace users
  - name: SequenceStates
    description: Track prospect enrollments in sequences
  - name: Prospects
    description: Manage prospects
  - name: Accounts
    description: Access account (company) records
  - name: Notes
    description: Create CRM notes on prospects and accounts
  - name: Mailboxes
    description: Manage mailboxes (email aliases)
  - name: SequenceSteps
    description: Access sequence step definitions
  - name: Calls
    description: Access call records
  - name: CallDispositions
    description: Access call disposition definitions
  - name: Tasks
    description: Manage tasks (one-off calls and email activities)
  - name: EmailTemplates
    description: Access email template content
  - name: Introspection
    description: Inspect the authenticated principal

x-tagGroups:
  - name: API Reference
    tags:
      - Sequences
      - SequenceSteps
      - Emails
      - Users
      - SequenceStates
      - Prospects
      - Accounts
      - Notes
      - Mailboxes
      - Calls
      - CallDispositions
      - Tasks
      - EmailTemplates
      - Introspection

paths:
  /sequences:
    get:
      operationId: listSequences
      summary: List sequences
      description: |
        Returns a paginated list of sequences.

        Example:
        ```bash
        curl -X GET 'https://partner-api.nooks.in/v1/sequences?filter[name]=Q1+Outbound+Campaign' \
          -H "Authorization: Bearer nooks-api-..."
        ```

        With include:
        ```bash
        curl -X GET 'https://partner-api.nooks.in/v1/sequences?include=owner,sequenceSteps' \
          -H "Authorization: Bearer nooks-api-..."
        ```
      tags:
        - Sequences
      parameters:
        - $ref: "#/components/parameters/PageSize"
        - $ref: "#/components/parameters/PageAfter"
        - $ref: "#/components/parameters/PageBefore"
        - name: filter[name]
          in: query
          description: Filter sequences by exact name match
          required: false
          schema:
            type: string
          example: "Q1 Outbound Campaign"
        - name: filter[type]
          in: query
          description: "Filter by sequence type. Valid values: date, interval"
          required: false
          schema:
            type: string
            enum:
              - date
              - interval
          example: "interval"
        - name: include
          in: query
          description: "Comma-separated relations to expand inline (`owner`, `sequenceSteps`) or computed fields to include (`analytics`). Max 3."
          required: false
          schema:
            type: array
            items:
              type: string
              enum: [owner, sequenceSteps, analytics]
            maxItems: 3
          style: form
          explode: false
          example: [owner, sequenceSteps]
        - $ref: "#/components/parameters/FilterUpdatedAtGte"
        - $ref: "#/components/parameters/FilterUpdatedAtLt"
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Sequence"
                  links:
                    $ref: "#/components/schemas/PaginationLinks"
              example:
                data:
                  - id: "550e8400-e29b-41d4-a716-446655440000"
                    name: "Q1 Outbound Campaign"
                    type: "interval"
                    enabled: true
                    owner:
                      id: "660e8400-e29b-41d4-a716-446655440001"
                      _href: "/v1/users/660e8400-e29b-41d4-a716-446655440001"
                    sequenceSteps:
                      - id: "aa0e8400-e29b-41d4-a716-446655440030"
                        _href: "/v1/sequenceSteps/aa0e8400-e29b-41d4-a716-446655440030"
                      - id: "aa0e8400-e29b-41d4-a716-446655440031"
                        _href: "/v1/sequenceSteps/aa0e8400-e29b-41d4-a716-446655440031"
                    privacy: "team_editable"
                    createdAt: "2026-01-12T09:30:00Z"
                    updatedAt: "2026-01-15T09:30:00Z"
                  - id: "660e8400-e29b-41d4-a716-446655440002"
                    name: "Q2 Follow-up Sequence"
                    type: "date"
                    enabled: false
                    owner:
                      id: "660e8400-e29b-41d4-a716-446655440001"
                      _href: "/v1/users/660e8400-e29b-41d4-a716-446655440001"
                    sequenceSteps: []
                    privacy: "private"
                    createdAt: "2026-01-08T14:00:00Z"
                    updatedAt: "2026-01-10T14:00:00Z"
                links:
                  first: "https://partner-api.nooks.in/v1/sequences?page[size]=50"
                  prev: null
                  next: "https://partner-api.nooks.in/v1/sequences?page[size]=50&page[after]=eyJpZCI6IjY2MGU4NDAwLWUyOWItNDFkNC1hNzE2LTQ0NjY1NTQ0MDAwMiIsInYiOjF9"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"

    post:
      operationId: createSequence
      summary: Create a sequence
      description: |
        Creates a new, empty sequence owned by the given user. Steps are
        added and edited in the Nooks app — this endpoint creates the
        sequence container (name, type, owner, privacy).

        OAuth callers with the `user` role can only create sequences owned
        by themselves; `admin` and `manager` roles can create sequences for
        any user in the workspace. When that check fails (or `owner.id` is
        not a workspace member), OAuth callers receive `403
        INSUFFICIENT_PERMISSION`; API-key callers receive `422` for an
        unknown owner. To enroll prospects into the new sequence, use
        `POST /v1/sequenceStates`.

        Example:
        ```bash
        curl -X POST 'https://partner-api.nooks.in/v1/sequences' \
          -H "Authorization: Bearer nooks-api-..." \
          -H "Content-Type: application/json" \
          -d '{
            "data": {
              "name": "Q3 Outbound Campaign",
              "owner": { "id": "KKLvN5wQoghWFwUvC75CZ12QM7I3" }
            }
          }'
        ```
      tags:
        - Sequences
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: Request body for creating a sequence
              additionalProperties: false
              properties:
                data:
                  type: object
                  additionalProperties: false
                  properties:
                    name:
                      type: string
                      minLength: 1
                      description: Name of the sequence
                      example: "Q3 Outbound Campaign"
                    type:
                      type: string
                      enum:
                        - interval
                        - date
                      default: "interval"
                      description: |
                        Scheduling model for the sequence. `interval` steps are
                        spaced relative to the previous step; `date` steps run
                        on fixed dates.
                      example: "interval"
                    owner:
                      type: object
                      description: The user who will own the sequence
                      additionalProperties: false
                      properties:
                        id:
                          type: string
                          minLength: 1
                          maxLength: 128
                          pattern: "^[A-Za-z0-9_-]{1,128}$"
                          description: ID of the owner user (Firebase UID)
                          example: "KKLvN5wQoghWFwUvC75CZ12QM7I3"
                      required:
                        - id
                    enabled:
                      type: boolean
                      default: true
                      description: Whether the sequence is active (`false` = archived)
                      example: true
                    privacy:
                      type: string
                      enum:
                        - private
                        - team_visible
                        - team_editable
                      default: "team_editable"
                      description: Privacy level of the sequence
                      example: "team_editable"
                  required:
                    - name
                    - owner
              required:
                - data
      responses:
        "201":
          description: Sequence created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Sequence"
              example:
                id: "550e8400-e29b-41d4-a716-446655440000"
                name: "Q3 Outbound Campaign"
                type: "interval"
                enabled: true
                owner:
                  id: "KKLvN5wQoghWFwUvC75CZ12QM7I3"
                  _href: "/v1/users/KKLvN5wQoghWFwUvC75CZ12QM7I3"
                sequenceSteps: []
                privacy: "team_editable"
                createdAt: "2026-01-12T09:30:00Z"
                updatedAt: "2026-01-15T09:30:00Z"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          description: |
            Forbidden — the OAuth token lacks the `sequences:write` scope
            (`INSUFFICIENT_SCOPE`), or the caller's role does not permit
            acting on this sequence or owner (`INSUFFICIENT_PERMISSION`).
            API-key callers are not subject to this check.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              example:
                error:
                  code: "INSUFFICIENT_PERMISSION"
                  message: "You do not have permission to perform this action"
        "422":
          description: |
            Unprocessable entity — `owner.id` is not a user in this workspace
            (use an id from `GET /v1/users`). Only returned to API-key
            callers; OAuth callers instead receive `403
            INSUFFICIENT_PERMISSION` for an unknown owner (see above).
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              example:
                error:
                  code: "UNPROCESSABLE_ENTITY"
                  message: "Owner user KKLvN5wQoghWFwUvC75CZ12QM7I3 not found in this workspace. Use a user id from GET /v1/users."
        "429":
          $ref: "#/components/responses/RateLimitExceeded"
        "500":
          $ref: "#/components/responses/InternalError"

  /sequences/{id}:
    get:
      operationId: getSequence
      summary: Get sequence by ID
      description: |
        Returns a single sequence by its unique identifier.

        Example:
        ```bash
        curl -X GET 'https://partner-api.nooks.in/v1/sequences/550e8400-e29b-41d4-a716-446655440000' \
          -H "Authorization: Bearer nooks-api-..."
        ```

        With include:
        ```bash
        curl -X GET 'https://partner-api.nooks.in/v1/sequences/550e8400-e29b-41d4-a716-446655440000?include=owner' \
          -H "Authorization: Bearer nooks-api-..."
        ```
      tags:
        - Sequences
      parameters:
        - name: id
          in: path
          required: true
          description: Unique identifier for the sequence
          schema:
            type: string
            format: uuid
          example: "550e8400-e29b-41d4-a716-446655440000"
        - name: include
          in: query
          description: "Comma-separated relations to expand inline (`owner`, `sequenceSteps`) or computed fields to include (`analytics`). Max 3."
          required: false
          schema:
            type: array
            items:
              type: string
              enum: [owner, sequenceSteps, analytics]
            maxItems: 3
          style: form
          explode: false
          example: [analytics]
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Sequence"
              example:
                id: "550e8400-e29b-41d4-a716-446655440000"
                name: "Q1 Outbound Campaign"
                type: "interval"
                enabled: true
                owner:
                  id: "660e8400-e29b-41d4-a716-446655440001"
                  _href: "/v1/users/660e8400-e29b-41d4-a716-446655440001"
                sequenceSteps:
                  - id: "aa0e8400-e29b-41d4-a716-446655440030"
                    _href: "/v1/sequenceSteps/aa0e8400-e29b-41d4-a716-446655440030"
                  - id: "aa0e8400-e29b-41d4-a716-446655440031"
                    _href: "/v1/sequenceSteps/aa0e8400-e29b-41d4-a716-446655440031"
                privacy: "team_editable"
                analytics:
                  email:
                    delivered: 412
                    opened: 198
                    clicked: 41
                    replied: 23
                    bounced: 7
                    unsubscribed: 2
                  calls:
                    dialed: 380
                    connected: 71
                    meetings: 5
                  linkedIn: null
                createdAt: "2026-01-12T09:30:00Z"
                updatedAt: "2026-01-15T09:30:00Z"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "404":
          $ref: "#/components/responses/NotFound"
        "500":
          $ref: "#/components/responses/InternalError"

    patch:
      operationId: updateSequence
      summary: Update a sequence
      description: |
        Updates a sequence's name and/or `enabled` flag. Setting `enabled`
        to `false` archives the sequence; `true` reactivates it. At least
        one field must be provided.

        OAuth callers with the `user` role can only update sequences they
        own (`403 INSUFFICIENT_PERMISSION` otherwise); `admin` and `manager`
        roles can update any sequence in the workspace.

        Example:
        ```bash
        curl -X PATCH 'https://partner-api.nooks.in/v1/sequences/550e8400-e29b-41d4-a716-446655440000' \
          -H "Authorization: Bearer nooks-api-..." \
          -H "Content-Type: application/json" \
          -d '{ "data": { "name": "Q3 Outbound Campaign (paused)", "enabled": false } }'
        ```
      tags:
        - Sequences
      parameters:
        - name: id
          in: path
          required: true
          description: Unique identifier for the sequence
          schema:
            type: string
            format: uuid
          example: "550e8400-e29b-41d4-a716-446655440000"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: Request body for updating a sequence
              additionalProperties: false
              properties:
                data:
                  type: object
                  minProperties: 1
                  additionalProperties: false
                  description: At least one of `name` or `enabled` is required.
                  properties:
                    name:
                      type: string
                      minLength: 1
                      description: New name for the sequence
                      example: "Q3 Outbound Campaign (paused)"
                    enabled:
                      type: boolean
                      description: Whether the sequence is active (`false` = archived)
                      example: false
              required:
                - data
      responses:
        "200":
          description: Sequence updated
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Sequence"
              example:
                id: "550e8400-e29b-41d4-a716-446655440000"
                name: "Q3 Outbound Campaign (paused)"
                type: "interval"
                enabled: false
                owner:
                  id: "660e8400-e29b-41d4-a716-446655440001"
                  _href: "/v1/users/660e8400-e29b-41d4-a716-446655440001"
                sequenceSteps:
                  - id: "aa0e8400-e29b-41d4-a716-446655440030"
                    _href: "/v1/sequenceSteps/aa0e8400-e29b-41d4-a716-446655440030"
                privacy: "team_editable"
                createdAt: "2026-01-12T09:30:00Z"
                updatedAt: "2026-01-15T09:30:00Z"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          description: |
            Forbidden — the OAuth token lacks the `sequences:write` scope
            (`INSUFFICIENT_SCOPE`), or the caller's role does not permit
            acting on this sequence or owner (`INSUFFICIENT_PERMISSION`).
            API-key callers are not subject to this check.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              example:
                error:
                  code: "INSUFFICIENT_PERMISSION"
                  message: "You do not have permission to perform this action"
        "404":
          $ref: "#/components/responses/NotFound"
        "422":
          $ref: "#/components/responses/UnprocessableEntity"
        "429":
          $ref: "#/components/responses/RateLimitExceeded"
        "500":
          $ref: "#/components/responses/InternalError"

  /sequenceSteps:
    get:
      operationId: listSequenceSteps
      summary: List sequence steps
      description: |
        Returns a paginated list of sequence steps. Supports filtering by step IDs or by sequence.

        Example:
        ```bash
        curl -X GET 'https://partner-api.nooks.in/v1/sequenceSteps?page[size]=50' \
          -H "Authorization: Bearer nooks-api-..."
        ```

        Filter by sequence:
        ```bash
        curl -X GET 'https://partner-api.nooks.in/v1/sequenceSteps?filter[sequence][id]=550e8400-e29b-41d4-a716-446655440000' \
          -H "Authorization: Bearer nooks-api-..."
        ```

        Filter by IDs:
        ```bash
        curl -X GET 'https://partner-api.nooks.in/v1/sequenceSteps?filter[id]=UUID1,UUID2' \
          -H "Authorization: Bearer nooks-api-..."
        ```
      tags:
        - SequenceSteps
      parameters:
        - $ref: "#/components/parameters/PageSize"
        - $ref: "#/components/parameters/PageAfter"
        - $ref: "#/components/parameters/PageBefore"
        - $ref: "#/components/parameters/FilterId"
        - name: filter[sequence][id]
          in: query
          description: Filter steps belonging to a specific sequence
          required: false
          schema:
            type: string
            format: uuid
          example: "550e8400-e29b-41d4-a716-446655440000"
        - name: include
          in: query
          description: "Comma-separated relations to expand inline (`sequence`, `template`) or computed fields to include (`analytics`). Max 3."
          required: false
          schema:
            type: array
            items:
              type: string
              enum: [sequence, template, analytics]
            maxItems: 3
          style: form
          explode: false
          example: [analytics]
        - $ref: "#/components/parameters/FilterUpdatedAtGte"
        - $ref: "#/components/parameters/FilterUpdatedAtLt"
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/SequenceStep"
                  links:
                    $ref: "#/components/schemas/PaginationLinks"
              example:
                data:
                  - id: "aa0e8400-e29b-41d4-a716-446655440030"
                    order: 0
                    interval: null
                    action: "auto_email"
                    note: "Initial outreach email"
                    sequence:
                      id: "550e8400-e29b-41d4-a716-446655440000"
                      _href: "/v1/sequences/550e8400-e29b-41d4-a716-446655440000"
                    template:
                      id: "ee0e8400-e29b-41d4-a716-446655440080"
                      _href: "/v1/emailTemplate/ee0e8400-e29b-41d4-a716-446655440080"
                    hasAbVariants: true
                    createdAt: "2025-10-01T10:00:00.000Z"
                    updatedAt: "2025-10-01T10:00:00.000Z"
                  - id: "aa0e8400-e29b-41d4-a716-446655440031"
                    order: 1
                    interval: 4320
                    action: "call"
                    note: null
                    sequence:
                      id: "550e8400-e29b-41d4-a716-446655440000"
                      _href: "/v1/sequences/550e8400-e29b-41d4-a716-446655440000"
                    template: null
                    hasAbVariants: false
                    createdAt: "2025-10-01T10:00:00.000Z"
                    updatedAt: "2025-10-01T10:00:00.000Z"
                links:
                  first: "https://partner-api.nooks.in/v1/sequenceSteps?page[size]=50"
                  prev: null
                  next: "https://partner-api.nooks.in/v1/sequenceSteps?page[size]=50&page[after]=eyJpZCI6ImFhMGU4NDAwLWUyOWItNDFkNC1hNzE2LTQ0NjY1NTQ0MDAzMSIsInYiOjF9"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"

  /sequenceSteps/{id}:
    get:
      operationId: getSequenceStep
      summary: Get sequence step by ID
      description: |
        Returns a single sequence step by its unique identifier.

        Example:
        ```bash
        curl -X GET 'https://partner-api.nooks.in/v1/sequenceSteps/aa0e8400-e29b-41d4-a716-446655440030' \
          -H "Authorization: Bearer nooks-api-..."
        ```
      tags:
        - SequenceSteps
      parameters:
        - name: id
          in: path
          required: true
          description: Unique identifier for the sequence step
          schema:
            type: string
            format: uuid
          example: "aa0e8400-e29b-41d4-a716-446655440030"
        - name: include
          in: query
          description: "Comma-separated relations to expand inline (`sequence`, `template`) or computed fields to include (`analytics`). Max 3."
          required: false
          schema:
            type: array
            items:
              type: string
              enum: [sequence, template, analytics]
            maxItems: 3
          style: form
          explode: false
          example: [analytics]
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SequenceStep"
              example:
                id: "aa0e8400-e29b-41d4-a716-446655440030"
                order: 0
                interval: null
                action: "auto_email"
                note: "Initial outreach email"
                sequence:
                  id: "550e8400-e29b-41d4-a716-446655440000"
                  _href: "/v1/sequences/550e8400-e29b-41d4-a716-446655440000"
                template:
                  id: "ee0e8400-e29b-41d4-a716-446655440080"
                  _href: "/v1/emailTemplate/ee0e8400-e29b-41d4-a716-446655440080"
                hasAbVariants: true
                analytics:
                  email:
                    delivered: 412
                    opened: 198
                    clicked: 41
                    replied: 23
                    bounced: 7
                    unsubscribed: 2
                  calls: null
                  linkedIn: null
                createdAt: "2025-10-01T10:00:00.000Z"
                updatedAt: "2025-10-01T10:00:00.000Z"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "404":
          $ref: "#/components/responses/NotFound"
        "500":
          $ref: "#/components/responses/InternalError"

  /emailTemplate/{id}:
    get:
      operationId: getEmailTemplate
      summary: Get email template by ID
      description: |
        Returns the full content of a single email template by its unique identifier.
        Tem

# --- truncated at 32 KB (204 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/nooks/refs/heads/main/openapi/nooks-sequencing-openapi.yml