{
  "swagger": "2.0",
  "info": {
    "version": "2.7.1",
    "title": "API Documentation V2",
    "description": "<h4>Authentication</h4>\n                                                                                    API key must be provided in the <code>X-API-Key</code> header:<br/>\n                                                                                    <code>X-API-Key: {your-api-key-guid}</code><br/><br/>\n                                                                                    <strong>Note:</strong> V2 does not support query parameter authentication for security reasons.\n                                                                                    If header-based authentication presents integration challenges for your use case,\n                                                                                    please contact our support team to discuss alternative solutions.\n                                                                                    <h4>Naming</h4>\n                                                                                    'Clientspaces' in this API are called 'Subaccounts' in the web app. The API keeps the original\n                                                                                    resource name (<code>/api/v2/clientspaces</code>) for backward compatibility; they are the same thing.\n                                                                                    <h4>Rate Limits</h4>\n                                                                                    Limits are per organization (not per endpoint). The main account and its workspaces share one bucket; each clientspace (called a Subaccount in the web app) has its own bucket.<br/>\n                                                                                    <strong>Standard:</strong> 60 requests per minute (all orgs by default).<br/>\n                                                                                    <strong>Elevated tier:</strong> 300 requests per minute for the main account and its workspaces (Business, Agency including trial, and UltraMode addon).<br/>\n                                                                                    <strong>Clientspaces (Subaccounts):</strong> 60 requests per minute each, independent of the main account and of other clientspaces.<br/>\n                                                                                    Exceeding the limit returns HTTP 429 with <code>Retry-After</code> (seconds to wait) plus <code>X-RateLimit-Limit</code>, <code>X-RateLimit-Remaining</code>, and <code>X-RateLimit-Reset</code> (seconds remaining in the window, suffixed with <code>s</code>). Wait for <code>Retry-After</code> before retrying; do not retry immediately. A quiet 60-second window clears the counter.<br/>\n                                                                                    <strong>Automation (N8N, MCP, Zapier):</strong> a single workflow step often issues several HTTP calls (list messages, resolve sender, send reply). Count those API calls against the per-account limit, not the number of workflow runs.\n                                                                                    <h4>Changelog</h4>\n                                                                                    <strong>2.7.1</strong> (2026-09-18): <code>GET /api/v2/messages?type=Sent</code> with <code>emailFrom</code> is much faster on large campaigns. Request parameters and response fields are unchanged.<br/>\n                                                                                    <strong>2.7.0</strong> (2026-09-18): Campaign <code>dailyLimitWhichEmailsCount</code>, <code>dailyLimitPer</code>, <code>dailyLimitPrioritize</code> and sender <code>accountType</code>: reading a record with a legacy or invalid stored value no longer returns 500. The campaign fields fall back to <code>All</code>, <code>Campaign</code> and <code>Followup</code>, matching how such campaigns are scheduled; <code>accountType</code> falls back to its default <code>CustomSmtp</code>. Request validation is unchanged.<br/>\n                                                                                    <code>DELETE /api/v2/lists/{id}</code> accepts optional <code>force</code> (default <code>false</code>). With <code>force=true</code> the list's prospect memberships are removed and the list is deleted; the prospects themselves are kept. Lists with more than 10,000 prospects return 422 <code>RESOURCE_LIMIT_EXCEEDED</code>. Without <code>force</code> the behaviour is unchanged (400 while the list has prospects).<br/>\n                                                                                    Campaign responses add <code>softBounceCount</code>: prospects currently classified as soft-bounced (temporary delivery failure) at the last statistics refresh; they are included in <code>bounceCount</code>. Soft classification started on 2026-09-03. The <code>bounceCount</code> description now states that it counts prospects, hard and soft; its value is unchanged.<br/>\n                                                                                    Reply messages on <code>GET /api/v2/messages</code> and <code>GET /api/v2/prospects/{id}/messages</code> include <code>senderId</code>, the connected mailbox that received the reply (null on Sent messages). The <code>prospect_replied</code> and <code>prospect_interested</code> webhooks add <code>replyId</code>, <code>toEmail</code> and <code>receivingSenderId</code> when the event has a reply, and fill <code>sender_email</code> from the sent message when it was missing.<br/>\n                                                                                    <strong>2.6.0</strong> (2026-09-16): Reply <code>body</code> on <code>GET /api/v2/messages?type=Reply</code> and <code>GET /api/v2/prospects/{id}/messages</code> is populated for text/plain replies when detail <code>TextBody</code> exists (empty-string <code>Body</code> no longer blocks fallback).<br/>\n                                                                                    <strong>2.5.0</strong> (2026-09-12): <strong>Breaking:</strong> <code>POST /api/v2/senders</code> at the active-sender cap returns <code>403 PLAN_REQUIRED</code> (upgradeable) or <code>422 RESOURCE_LIMIT_EXCEEDED</code> (hard ceiling), not <code>401 AUTHENTICATION_FAILED</code>.\n                                                                                    Standard cap is 1000 active senders per account or workspace; Business, Agency (including trial), or UltraMode raises the cap to 5000. Each clientspace has its own sender count (1000 max by default).<br/>\n                                                                                    <code>POST /api/v2/users</code> invited users are created with confirmed email (<code>emailConfirmed: true</code>), matching dashboard invites; fixes login after password setup.<br/>\n                                                                                    <strong>2.4.0</strong> (2026-09-09): Workspaces share the main account rate-limit bucket; each clientspace (Subaccount) has its own 60 requests per minute limit.<br/>\n                                                                                    <strong>2.3.0</strong> (2026-09-08): API rate limit is 60 requests per minute per account by default; orgs with Business, Agency (including trial), or UltraMode receive 300 requests per minute. Limits apply across all API keys under the account.<br/>\n                                                                                    <strong>2.2.2</strong> (2026-09-04): <code>GET /api/v2/messages</code> returns 422 when page-only pagination exceeds 10,000 rows; use <code>starting_after</code> (NextCursor) for deeper lists.<br/>\n                                                                                    <strong>2.2.1</strong> (2026-09-02): <code>POST /api/v2/users</code> duplicate-email error distinguishes same-org vs cross-account registration.<br/>\n                                                                                    <strong>2.2.0</strong> (2026-08-20): sequence <code>conditionReply</code> adds <code>Won</code>, <code>MeetingBooked</code>, <code>MeetingCompleted</code>.<br/>\n                                                                                    <strong>2.1.0</strong> (2026-08-19): campaign <code>delayMinSeconds</code> and sender <code>delayMinMinutes</code> added (the old delay fields are deprecated, see their descriptions);\n                                                                                    clientspace and workspace credit endpoints <code>POST/GET /api/v2/clientspaces/{id}/credits</code> and <code>POST/GET /api/v2/workspaces/{id}/credits</code> with idempotent allocations;\n                                                                                    sequence <code>conditionAction</code>/<code>conditionOperator</code> are nullable in responses; new 402 error <code>INSUFFICIENT_SENDING_CREDITS</code>.<br/>\n                                                                                    <strong>2.0.0</strong>: baseline V2 API.",
    "x-swagger-net-version": "8.5.12.001"
  },
  "host": "api.manyreach.com",
  "schemes": [
    "https"
  ],
  "paths": {
    "/api/v2/account": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get account",
        "description": "API endpoint for GetAccount",
        "operationId": "Api2Account_GetAccount",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Account context retrieved",
            "schema": {
              "$ref": "#/definitions/AccountContext"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/account/credits": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get sending credit",
        "description": "API endpoint for GetCredits",
        "operationId": "Api2Account_GetCredits",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Sending credit balance retrieved",
            "schema": {
              "$ref": "#/definitions/SendingCreditStatus"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/account/data-tokens": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get data token",
        "description": "API endpoint for GetDataTokens",
        "operationId": "Api2Account_GetDataTokens",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Data Token status retrieved",
            "schema": {
              "$ref": "#/definitions/DataTokenStatus"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/blacklist/domains": {
      "get": {
        "tags": [
          "Blacklist"
        ],
        "summary": "Get all blacklisted domain",
        "description": "API endpoint for GetDomains",
        "operationId": "Api2Blacklist_GetDomains",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "description": "Parameter: search",
            "required": false,
            "type": "string"
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Domain blacklist retrieved",
            "schema": {
              "$ref": "#/definitions/Api2BlacklistDomainPage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "post": {
        "tags": [
          "Blacklist"
        ],
        "summary": "Add domains to the blacklist.",
        "description": "API endpoint for AddDomains",
        "operationId": "Api2Blacklist_AddDomains",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Parameter: request",
            "required": true,
            "schema": {
              "$ref": "#/definitions/Api2BlacklistDomainsAddRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "201": {
            "description": "Domains added to blacklist"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/blacklist/domains/check": {
      "get": {
        "tags": [
          "Blacklist"
        ],
        "summary": "Check if a domain is blacklisted.",
        "description": "API endpoint for CheckDomain",
        "operationId": "Api2Blacklist_CheckDomain",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "description": "Parameter: domain",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Check result",
            "schema": {
              "$ref": "#/definitions/Api2BlacklistCheckResponse"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/blacklist/domains/{id}": {
      "delete": {
        "tags": [
          "Blacklist"
        ],
        "summary": "Remove a domain blacklist entry by BlockID.",
        "description": "API endpoint for DeleteDomainById",
        "operationId": "Api2Blacklist_DeleteDomainById",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Parameter: id",
            "required": true,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Entry removed"
          },
          "404": {
            "description": "Entry not found"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/blacklist/emails": {
      "get": {
        "tags": [
          "Blacklist"
        ],
        "summary": "Get all blacklist email",
        "description": "API endpoint for GetEmails",
        "operationId": "Api2Blacklist_GetEmails",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "description": "Parameter: search",
            "required": false,
            "type": "string"
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Email blacklist retrieved",
            "schema": {
              "$ref": "#/definitions/Api2BlacklistEmailPage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "post": {
        "tags": [
          "Blacklist"
        ],
        "summary": "Add emails to the blacklist.",
        "description": "API endpoint for AddEmails",
        "operationId": "Api2Blacklist_AddEmails",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Parameter: request",
            "required": true,
            "schema": {
              "$ref": "#/definitions/Api2BlacklistEmailsAddRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "201": {
            "description": "Emails added to blacklist",
            "schema": {
              "$ref": "#/definitions/Api2BlacklistEmailsAddResponse"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/blacklist/emails/check": {
      "get": {
        "tags": [
          "Blacklist"
        ],
        "summary": "Check if an email is blacklisted",
        "description": "API endpoint for CheckEmail",
        "operationId": "Api2Blacklist_CheckEmail",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "description": "Parameter: email",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Check result",
            "schema": {
              "$ref": "#/definitions/Api2BlacklistCheckResponse"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/blacklist/emails/{id}": {
      "delete": {
        "tags": [
          "Blacklist"
        ],
        "summary": "Remove an email blacklist entry by BlockID.",
        "description": "API endpoint for DeleteEmailById",
        "operationId": "Api2Blacklist_DeleteEmailById",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Parameter: id",
            "required": true,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Entry removed"
          },
          "404": {
            "description": "Entry not found"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/campaigns": {
      "get": {
        "tags": [
          "Campaign"
        ],
        "summary": "Get all campaigns",
        "description": "Retrieves campaigns belonging to the authenticated organization.  \r\n\r\n### Behavior\r\n- Extracts and validates the API key (from header or query).  \r\n- Authenticates the organization using the API key.  \r\n- Retrieves campaigns ordered by <b>name (descending)</b>.  \r\n- Supports <b>offset pagination</b> via page + limit.  \r\n- Supports <b>cursor-based pagination</b> via starting_after.  \r\n- By default excludes archived campaigns; set include_archived=true to include them, or filter with status (exact CampStatus).  \r\n- Returns a paginated response with TotalRecords, Page, and PageSize.",
        "operationId": "ApiCampaign_GetCampaigns",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "pageQuery.includeArchived",
            "in": "query",
            "description": "When false (default), rows with CampStatus archived are excluded unless Status is set to archived.",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "pageQuery.status",
            "in": "query",
            "description": "Optional exact CampStatus filter (case-insensitive), e.g. running, paused, draft, completed, archived, scheduled, preparing.",
            "required": false,
            "type": "string"
          },
          {
            "name": "pageQuery.page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "pageQuery.limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "pageQuery.startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Campaigns retrieved successfully",
            "schema": {
              "$ref": "#/definitions/CampaignPage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "post": {
        "tags": [
          "Campaign"
        ],
        "summary": "Create new campaign",
        "description": "Creates a new campaign associated with the authenticated organization.\r\n            \r\nBehavior:\r\n- Extracts and validates API key (header/query).\r\n- Authenticates org using API key.\r\n- Checks campaign limit for the org variant (normal/PowerMode).\r\n- Builds and saves the new campaign.\r\n- Automatically creates a default sequence ('1') with onboarding if relevant.\r\n- Returns details of the created campaign, or appropriate error.",
        "operationId": "ApiCampaign_CreateCampaignAsync",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Campaign object to create.  \r\nOnly minimal information is required; the system will set required fields.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CampaignCreate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "201": {
            "description": "Campaign created successfully",
            "schema": {
              "$ref": "#/definitions/Campaign"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/campaigns/{id}": {
      "get": {
        "tags": [
          "Campaign"
        ],
        "summary": "Get campaign by ID",
        "description": "Retrieves campaign details by campaign ID for the authenticated organization.\r\n            \r\nBehavior:\r\n- Extracts and validates the API key (from header or query).\r\n- Authenticates organization using the API key.\r\n- Validates that the campaign exists and is owned by the organization.\r\n- Returns campaign details: name, status, creation date, engagement metrics, or 404/403 accordingly.",
        "operationId": "ApiCampaign_GetCampaignByID",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Unique identifier of the campaign to retrieve.",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Campaign retrieved successfully",
            "schema": {
              "$ref": "#/definitions/Campaign"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Campaign"
        ],
        "summary": "Delete campaign",
        "description": "Deletes a campaign by ID for the authenticated organization.\r\nBehavior:\r\n- Extracts and validates the API key (from header or query).\r\n- Authenticates the organization using the API key.\r\n- Checks campaign existence and ownership.\r\n- Performs soft delete and returns deleted campaign, or error result as appropriate.",
        "operationId": "ApiCampaign_DeleteCampaign",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the campaign for delete campaign",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Campaign deleted successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Campaign"
        ],
        "summary": "Update campaign",
        "description": "Updates only supplied fields for a single campaign by ID.\r\n            \r\nBehavior:\r\n- Extracts and validates API key (header or query).\r\n- Authenticates org using API key.\r\n- Validates the campaign ID and request body.\r\n- Applies non-null valid fields as a PATCH (partial update).\r\n- Validates special fields (emails, time windows, DelayMin/Max, etc).\r\n- Logs and returns change details, errors, or forbidden/not found/responses as needed.",
        "operationId": "ApiCampaign_UpdateCampaign",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Campaign patch data containing only the fields to update",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CampaignUpdate"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the campaign to update",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Campaign updated successfully",
            "schema": {
              "$ref": "#/definitions/Campaign"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/campaigns/{id}/start": {
      "post": {
        "tags": [
          "Campaign"
        ],
        "summary": "Start a campaign",
        "description": "Initiates a campaign to begin sending messages to its target audience",
        "operationId": "ApiCampaign_StartCampaignAsync",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Campaign ID for start campaign",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Campaign started successfully",
            "schema": {
              "$ref": "#/definitions/CampaignStatus"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/campaigns/{id}/pause": {
      "post": {
        "tags": [
          "Campaign"
        ],
        "summary": "Pause a campaign",
        "description": "Pauses an active campaign to temporarily stop sending messages",
        "operationId": "ApiCampaign_PauseCampaignAsync",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Campaign ID for pause campaign",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Campaign paused successfully",
            "schema": {
              "$ref": "#/definitions/CampaignStatus"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/campaigns/{id}/archive": {
      "post": {
        "tags": [
          "Campaign"
        ],
        "summary": "Archive a campaign",
        "description": "API endpoint for ArchiveCampaignAsync",
        "operationId": "ApiCampaign_ArchiveCampaignAsync",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Campaign ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "confirm",
            "in": "query",
            "description": "Set true after receiving CONFIRMATION_REQUIRED for a running campaign.",
            "required": false,
            "type": "boolean",
            "default": false
          }
        ],
        "responses": {
          "200": {
            "description": "Campaign archived",
            "schema": {
              "$ref": "#/definitions/CampaignStatus"
            }
          },
          "404": {
            "description": "Campaign not found"
          },
          "409": {
            "description": "Confirmation required before archiving a running campaign"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/campaigns/{id}/unarchive": {
      "post": {
        "tags": [
          "Campaign"
        ],
        "summary": "Restore an archived campaign to draft.",
        "description": "API endpoint for UnarchiveCampaignAsync",
        "operationId": "ApiCampaign_UnarchiveCampaignAsync",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Parameter: id",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Campaign unarchived",
            "schema": {
              "$ref": "#/definitions/CampaignStatus"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/campaigns/{id}/sequences": {
      "get": {
        "tags": [
          "Campaign"
        ],
        "summary": "Fetch campaign sequence",
        "description": "Fetches all sequences for a given campaign ID owned by the authenticated organization.\r\n            \r\nBehavior:\r\n- Validates API key (header/query) and organization.\r\n- Checks that campaign exists and belongs to organization.\r\n- Retrieves sequences and their nested followups and stats for the specified campaign.\r\n- Returns data or error response as appropriate.",
        "operationId": "ApiCampaign_GetCampaignSequences",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Campaign ID for get all campaign's sequences",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Sequences retrieved successfully",
            "schema": {
              "$ref": "#/definitions/SequencePage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "post": {
        "tags": [
          "Campaign"
        ],
        "summary": "Creates campaign sequence",
        "description": "Creates a new sequence for a specific campaign owned by the authenticated organization.\r\n            \r\nBehavior:\r\n- Validates API key (header/query), campaign ID ownership, and input model.\r\n- Checks campaign existence and per-campaign sequence limit.\r\n- Omitted or null conditionReply defaults to notReplied (database no-reply). Explicit \"all\" is unchanged.\r\n- Saves sequence and clears relevant caches.\r\n- Returns created sequence or error response.",
        "operationId": "ApiCampaign_CreateSequence",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Campaign ID for create campaign's sequences",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "request",
            "in": "body",
            "description": "CampaignSequence object for create.  \r\nOnly minimal information is required; the system will set required fields.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SequenceCreate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "201": {
            "description": "Sequence created successfully",
            "schema": {
              "$ref": "#/definitions/Sequence"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/campaigns/{id}/copy": {
      "post": {
        "tags": [
          "Campaign"
        ],
        "summary": "Create a copy of Campaign",
        "description": "Makes a copy of a campaign, including settings, sequences, and follow-ups. Prospect enrolment is not copied; the new campaign starts with 0 prospects.\r\n            \r\nBehavior:\r\n- Validates API key and authenticated org.\r\n- Checks campaign ID is provided and positive integer.\r\n- Performs copy operation and assigns new name if given.\r\n- Does not copy enrolled prospects; prospect counters in the response describe the new empty campaign.\r\n- Returns new campaign or error as appropriate.",
        "operationId": "ApiCampaign_CopyCampaign",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Campaign ID to be copied.",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "newCampaignName",
            "in": "query",
            "description": "Parameter: newCampaignName",
            "required": false,
            "type": "string",
            "default": ""
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "201": {
            "description": "Campaign copied successfully",
            "schema": {
              "$ref": "#/definitions/Campaign"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/campaigns/{id}/stats": {
      "get": {
        "tags": [
          "Campaign"
        ],
        "summary": "Get campaign statistics",
        "description": "Retrieves all statistical data for the specified campaign in the authenticated organization.\r\n            \r\nBehavior:\r\n- Validates API key/org and campaign existence.\r\n- Optionally refreshes statistics when refresh=true (checks completion status, recalculates stats, processes A/B tests, clears caches).\r\n- Verifies/normalizes date parameters and their ranges.\r\n- Returns statistics for the specified date range.\r\n            \r\nDate Defaults (if not provided):\r\n- dateStart: Campaign creation date\r\n- dateEnd: Current date/time",
        "operationId": "ApiCampaign_GetCampaignStats",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Campaign ID for which statistics are to be retrieved.",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "dateStart",
            "in": "query",
            "description": "Optional. The start date (inclusive) for the statistics data range.\r\nAccepts ISO 8601 format: yyyy-MM-dd or yyyy-MM-ddTHH:mm:ss.fffZ (Z is optional, always interpreted as UTC).\r\nIf not provided, defaults to the campaign creation date.",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "dateEnd",
            "in": "query",
            "description": "Optional. The end date (inclusive) for the statistics data range.\r\nAccepts ISO 8601 format: yyyy-MM-dd or yyyy-MM-ddTHH:mm:ss.fffZ (Z is optional, always interpreted as UTC).\r\nIf not provided, defaults to the current date.",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "refresh",
            "in": "query",
            "description": "Optional. Set to true to force refresh campaign statistics before retrieval.\r\nWhen true, recalculates all stats, processes A/B test variants, refreshes followups, and clears caches.\r\nDefaults to false for faster response times.",
            "required": false,
            "type": "boolean",
            "default": false
          }
        ],
        "responses": {
          "200": {
            "description": "Campaign statistics retrieved successfully",
            "schema": {
              "$ref": "#/definitions/CampaignStats"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/campaigns/{id}/prospects/{prospectId}": {
      "delete": {
        "tags": [
          "Campaign"
        ],
        "summary": "Delete prospect from campaign",
        "description": "Deletes a prospect by ID for the authenticated organization.\r\n            \r\nBehavior:\r\n- Extracts and validates the API key (from header or query).\r\n- Authenticates the organization using the API key.\r\n- Checks campaign existence and ownership.",
        "operationId": "ApiCampaign_RemoveProspectFromCampaign",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the campaign for remove prospect",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "prospectId",
            "in": "path",
            "description": "The ID of the prospect for remove prospect from campaign",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Prospect remove successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/campaigns/{id}/tags": {
      "post": {
        "tags": [
          "Campaign"
        ],
        "summary": "Add a single tag to a campaign",
        "description": "API endpoint for AddCampaignTags",
        "operationId": "ApiCampaign_AddCampaignTags",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Campaign ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "request",
            "in": "body",
            "description": "Request containing tag ID",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CampaignTagCreate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Tag added successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/campaigns/{id}/tags/{tagId}": {
      "delete": {
        "tags": [
          "Campaign"
        ],
        "summary": "Remove a specific tag from a campaign",
        "description": "API endpoint for RemoveCampaignTags",
        "operationId": "ApiCampaign_RemoveCampaignTags",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Campaign ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "tagId",
            "in": "path",
            "description": "Tag ID to remove",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Tag removed successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/clientspaces": {
      "get": {
        "tags": [
          "Clientspace"
        ],
        "summary": "Get all clientspaces",
        "description": "Retrieves all clientspaces under the authenticated parent organization (agency).\r\n\r\nBehavior:\r\n- Authenticates via API key\r\n- Only lists clientspaces for parent org\r\n- Utilizes whitelabel cache for count\r\n- Returns items and total count",
        "operationId": "Api2Clientspace_GetAllClientspace",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Clientspaces retrieved successfully",
            "schema": {
              "$ref": "#/definitions/ClientspacePage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "post": {
        "tags": [
          "Clientspace"
        ],
        "summary": "Create a clientspace",
        "description": "Creates a new clientspace under the authenticated parent organization (agency).\r\n\r\nBehavior:\r\n- Authenticates via API key\r\n- Requires admin rights on parent organization\r\n- Allocates fixed credits upon creation\r\n- Title must be unique for organization\r\n- Clientspace name/title. Must be unique within Organization",
        "operationId": "Api2Clientspace_CreateClientspace",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Clientspace create request object",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ClientspaceCreate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "201": {
            "description": "Clientspace created successfully",
            "schema": {
              "$ref": "#/definitions/Clientspace"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/clientspaces/{id}": {
      "get": {
        "tags": [
          "Clientspace"
        ],
        "summary": "Get clientspace by ID",
        "description": "Retrieves details of a specific clientspace by its OrganizationID.\r\n\r\nBehavior:\r\n- Authenticates via API key\r\n- Ensures the requested clientspace belongs to the authenticated parent organization\r\n- Only users from the parent organization can access",
        "operationId": "Api2Clientspace_GetClientspaceById",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Clientspace (Organization) ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Clientspace retrieved successfully",
            "schema": {
              "$ref": "#/definitions/Clientspace"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Clientspace"
        ],
        "summary": "Delete a clientspace",
        "description": "Deletes a clientspace under the authenticated parent organization (agency).\r\n\r\nBehavior:\r\n- Authenticates via API key\r\n- Only parent org/agency can delete clientspaces\r\n- Requires Super Admin permissions\r\n- Removes organization from agency cache",
        "operationId": "Api2Clientspace_DeleteClientspace",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "OrganizationID to delete",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Clientspace deleted successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Clientspace"
        ],
        "summary": "Update clientspace",
        "description": "Updates one or more clientspace fields (Title, Credit Limit, Separate Credits) under the authenticated organization.\r\n\r\nBehavior:\r\n- Authenticates via API key\r\n- Ensures the workspace belongs to caller's organization (as Agency)\r\n- Allows updating Title, Auto Allocate, Credit Amount, HasSeparateCredits\r\n- Ignores any fields not included in query\r\n- New title (optional, must be unique in agency)\r\n- Auto allocate credits (optional)\r\n- Credit Amount (optional)\r\n- Enable/disable separate credits (optional)",
        "operationId": "Api2Clientspace_UpdateClientspacev2",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Target Clientspace OrganizationID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "request",
            "in": "body",
            "description": "Parameter: request",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ClientspaceUpdate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Clientspace updated successfully",
            "schema": {
              "$ref": "#/definitions/Clientspace"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/clientspaces/{id}/credits": {
      "get": {
        "tags": [
          "Clientspace"
        ],
        "summary": "Get clientspace credits",
        "description": "Retrieves the sending credit balance of a clientspace with an explicit creditMode discriminator.\r\n            \r\nBehavior:\r\n- Authenticates via API key\r\n- The parent agency can read any of its clientspaces; a clientspace can read its own balance\r\n- creditMode 'separate': balance is the clientspace's own credit pool\r\n- creditMode 'shared': balance is the effective value (remaining monthly allocation when auto-allocation is enabled, otherwise the agency balance)\r\n- agencyBalance is populated only for the agency caller; on a clientspace self-read it is null",
        "operationId": "Api2Clientspace_GetClientspaceCredits",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Clientspace (Organization) ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Clientspace credit status retrieved successfully",
            "schema": {
              "$ref": "#/definitions/ClientspaceCreditStatus"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "post": {
        "tags": [
          "Clientspace"
        ],
        "summary": "Allocate clientspace credits",
        "description": "Moves sending credits from the authenticated agency to a clientspace with separate credits.\r\n            \r\nBehavior:\r\n- Authenticates via API key; only the parent agency can allocate\r\n- Only clientspaces with separate credits are eligible; shared-credit clientspaces are rejected with a pointer to PATCH /api/v2/clientspaces/{id} creditAmount\r\n- Credits the clientspace first, then debits the agency; a failed agency debit is reversed on the clientspace\r\n- externalReference makes the request idempotent per agency: a replay returns 200 with the original allocation fields and current balances instead of moving credits again\r\n- A blank or whitespace externalReference is treated as omitted (no idempotency key)\r\n- Reusing an externalReference with a different clientspace or amount is rejected with 422; each reference identifies exactly one allocation\r\n- A replayed failed allocation is returned as-is (status 'failed'), never re-executed; retry with a new reference once the cause is fixed\r\n- A replayed 'pending' allocation older than 15 minutes is returned as 'failed': the original request crashed before completing. It may have crashed AFTER moving credits, so verify the clientspace balance via GET /api/v2/clientspaces/{id}/credits before retrying with a new reference",
        "operationId": "Api2Clientspace_AllocateClientspaceCredits",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Clientspace (Organization) ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "request",
            "in": "body",
            "description": "Credit allocation request object",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ClientspaceCreditAllocationCreate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Idempotent replay: the allocation for this externalReference already exists and is returned unchanged",
            "schema": {
              "$ref": "#/definitions/ClientspaceCreditAllocation"
            }
          },
          "201": {
            "description": "Credits allocated successfully",
            "schema": {
              "$ref": "#/definitions/ClientspaceCreditAllocation"
            }
          },
          "402": {
            "description": "Insufficient sending credits on the agency account (INSUFFICIENT_SENDING_CREDITS)"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/followups/{id}": {
      "get": {
        "tags": [
          "Followup"
        ],
        "summary": "Get follow-up by ID",
        "description": "Retrieves the full details for a single follow-up in a campaign sequence, for the authenticated org.\r\n            \r\nBehavior:\r\n- Validates API key, follow-up ID, and related campaign ownership.\r\n- Looks up follow-up record, handles not-found and org ownership failures.\r\n- Maps follow-up to API response model and returns result, or error if any step fails.",
        "operationId": "ApiFollowup_GetFollowup",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "followup ID for single followup retrieval",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          }
        ],
        "responses": {
          "200": {
            "description": "Followup retrieved successfully",
            "schema": {
              "$ref": "#/definitions/Followup"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Followup"
        ],
        "summary": "Delete follow-up",
        "description": "Deletes (soft delete) a follow-up email for a campaign/sequence owned by the authenticated organization.\r\n            \r\nBehavior:\r\n- Validates API key, follow-up ID, and organization/campaign/sequence.\r\n- Sets follow-up Deleted flag and persists changes.\r\n- Clears all related cache, returns deleted follow-up info or error.",
        "operationId": "ApiFollowup_DeleteFollowup",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "followup ID for delete followup",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Followup deleted successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Followup"
        ],
        "summary": "Update follow-up",
        "description": "Updates supplied fields for a follow-up email in a campaign sequence belonging to the authenticated org.\r\n            \r\nBehavior:\r\n- Validates API key, follow-up ID, and input model.\r\n- Checks follow-up, campaign, and org association.\r\n- Performs partial, validated update on supplied fields.\r\n- Logs, clears caches, returns changed fields or error status.",
        "operationId": "ApiFollowup_UpdateFollowup",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "followup ID for update followup",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          },
          {
            "name": "request",
            "in": "body",
            "description": "followup object for update followup.\r\nOnly minimal information is required; the system will set required fields.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FollowupUpdate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Followup updated successfully",
            "schema": {
              "$ref": "#/definitions/Followup"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/lists": {
      "get": {
        "tags": [
          "List"
        ],
        "summary": "Retrieves all mailing lists",
        "description": "Returns all mailing lists for the authenticated organization.\r\n\r\nBehavior:\r\n- Authenticates API key and organization.\r\n- Retrieves list data from repository.\r\n- Orders lists by Title (descending).\r\n- Returns list data including metadata.",
        "operationId": "ApiList_GetLists",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "List retrieved successfully",
            "schema": {
              "$ref": "#/definitions/ListPage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "post": {
        "tags": [
          "List"
        ],
        "summary": "Creates a new mailing list",
        "description": "Creates a new list for the authenticated organization.\r\n\r\nBehavior:\r\n- Authenticates API request\r\n- Validates required fields\r\n- Checks for duplicate list name\r\n- Creates list record\r\n- Returns created list details",
        "operationId": "ApiList_CreateList",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "List data (Api2ListCreate DTO)",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ListCreate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "201": {
            "description": "List created successfully",
            "schema": {
              "$ref": "#/definitions/List"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/lists/{id}": {
      "get": {
        "tags": [
          "List"
        ],
        "summary": "Retrieves a specific mailing list by ID",
        "description": "Returns details of a single mailing list for the authenticated organization.\r\n            \r\nBehavior:\r\n- Authenticates API request\r\n- Validates list ID\r\n- Retrieves list by ID\r\n- Returns list details",
        "operationId": "ApiList_GetListById",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "List ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "List retrieved successfully",
            "schema": {
              "$ref": "#/definitions/List"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "delete": {
        "tags": [
          "List"
        ],
        "summary": "Deletes a list",
        "description": "Deletes a list from the organization.\r\n            \r\nBehavior:\r\n- Authenticates API request\r\n- Validates list exists and belongs to authenticated organization\r\n- force=false (default): fails with 400 while the list has prospect memberships\r\n- force=true: removes the list's prospect memberships in bounded batches, then deletes the list;\r\n  the prospects themselves are kept and their baseListId keeps pointing at the deleted list id\r\n- force=true on a list with more than 10,000 prospects returns 422 RESOURCE_LIMIT_EXCEEDED before\r\n  anything is deleted\r\n- Returns 204 No Content on successful deletion",
        "operationId": "ApiList_DeleteList",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "List ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "force",
            "in": "query",
            "description": "If true, removes prospect memberships in bounded batches and deletes lists with up to 10,000 prospects. Default: false",
            "required": false,
            "type": "boolean",
            "default": false
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "List deleted successfully"
          },
          "422": {
            "description": "force=true and the list has more than 10,000 prospects"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "patch": {
        "tags": [
          "List"
        ],
        "summary": "Updates an existing mailing list",
        "description": "Updates specified fields of a list.\r\n\r\nBehavior:\r\n- Authenticates API request\r\n- Validates list ID\r\n- Updates only provided fields\r\n- Returns updated list details",
        "operationId": "ApiList_UpdateList",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "List ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "request",
            "in": "body",
            "description": "Fields to update (Api2ListUpdate DTO)",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ListUpdate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List updated successfully",
            "schema": {
              "$ref": "#/definitions/List"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/lists/{id}/prospects/{prospectId}": {
      "delete": {
        "tags": [
          "List"
        ],
        "summary": "Remove a specific prospect from a list",
        "description": "API endpoint for RemoveListProspect",
        "operationId": "ApiList_RemoveListProspect",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Prospect ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "prospectId",
            "in": "path",
            "description": "Prospect(Lead) ID to remove",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Prospect removed successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/messages/reply": {
      "post": {
        "tags": [
          "Message"
        ],
        "summary": "Send a reply to a received message.",
        "description": "Sends an email reply to an existing received message.  \r\nSupports quoting the original message, personalization placeholders, CC/BCC,  \r\nsender override, and campaign-based tracking (opens/clicks).\r\n\r\nBehavior:\r\n- Validates the request and authentication.\r\n- Retrieves the original received message by ID (from request body).\r\n- Sanitizes the original body (removes tracking pixels and tracked links).\r\n- Verifies user permissions to access the organization inbox.\r\n- Selects the sender (original sender or `fromEmail` override).\r\n- Builds the reply content and applies personalization.\r\n- Optionally appends the quoted original message (`sendAsReply`).\r\n- Applies tracking if required by the campaign.\r\n- Sends the email via the external sending service.\r\n- Stores a record of the sent reply.\r\n\r\nTracking And Personalization:\r\n- Automatically adds tracking pixels and click-tracking if the message belongs to a tracked campaign.\r\n- Personalization placeholders (e.g., {FirstName}, {Company}) are replaced with prospect data.",
        "operationId": "Api2Message_Reply",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Reply details including message ID, recipient, body, subject, and options.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MessageReply"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/messages": {
      "get": {
        "tags": [
          "Message"
        ],
        "summary": "Retrieve messages by type",
        "description": "Retrieves a paginated list of messages filtered by type (Reply, Sent, SentManual)\r\n\r\nBehavior\r\n- Type parameter is required\r\n- Supports pagination with page and limit parameters\r\n- Supports cursor-based pagination via starting_after (DateTime)\r\n- Allows filtering by campaign ID, followup ID (FUID), sender ID\r\n- Supports search by subject, from email, to email, or content\r\n- Can filter by confirmed status\r\n- Returns first 500 characters of body\r\n\r\nResponse\r\n- Returns Api2MessagePage with Items and Pagination metadata\r\n- Each message includes tracking data (opens, clicks) for sent messages\r\n- Includes campaign and followup associations\r\n- Click details are included for sent messages",
        "operationId": "Api2Message_GetMessagesByType",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Message type filter (required). Valid values: Reply, Sent, SentManual",
            "required": true,
            "type": "string",
            "enum": [
              "Sent",
              "Reply",
              "SentManual"
            ]
          },
          {
            "name": "campaignId",
            "in": "query",
            "description": "Filter by campaign ID",
            "required": false,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "followupId",
            "in": "query",
            "description": "Filter by followup ID (FUID)",
            "required": false,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "senderId",
            "in": "query",
            "description": "Filter by sender ID",
            "required": false,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "confirmedStatus",
            "in": "query",
            "description": "Filter by confirmed status (e.g., Interested, BounceHard, NotInterested, etc.)",
            "required": false,
            "type": "string",
            "enum": [
              "Unknown",
              "EspMatchNotFound",
              "EspNotAllowed",
              "NoWarmup",
              "NotReceiving",
              "WarmupLimits",
              "SendingLimits",
              "NoSender",
              "Stuck",
              "MailboxInexistent",
              "EmptySubject",
              "EmptyBody",
              "MissingPlaceholder",
              "Invalid",
              "Blacklisted",
              "Stopped",
              "Unsub",
              "BounceHard",
              "BounceSoft",
              "AutoNolonger",
              "AutoOoo",
              "AutoReply",
              "CollegueReplied",
              "SenderDisconnected",
              "Paused",
              "InsufficientCredit",
              "ScheduleInactive",
              "NotInterested",
              "NotSet",
              "Neutral",
              "MaybeLater",
              "Interested",
              "MeetingBooked",
              "MeetingCompleted",
              "Won",
              "Subbed"
            ]
          },
          {
            "name": "emailFrom",
            "in": "query",
            "description": "Search email from",
            "required": false,
            "type": "string"
          },
          {
            "name": "emailTo",
            "in": "query",
            "description": "Search email to",
            "required": false,
            "type": "string"
          },
          {
            "name": "subject",
            "in": "query",
            "description": "Search subject",
            "required": false,
            "type": "string"
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/prospects/bulk": {
      "post": {
        "tags": [
          "Prospect"
        ],
        "summary": "Bulk add prospects to a list or campaign",
        "description": "Creates or updates prospects from the supplied prospect objects and optionally adds them to a list and/or campaign.\r\nExisting prospects are merged by email: omitted or null optional fields are ignored and do not clear saved values.\r\nExisting prospects keep their original createdAt value; createdAt is set only for newly inserted prospects.\r\n\r\nBehavior:\r\n- Authenticates API request\r\n- Validates listId when provided\r\n- Creates or updates prospects by email using non-destructive merge semantics\r\n- Adds prospects to the specified list/campaign via CampaignService when listId or campaignId is provided",
        "operationId": "ApiProspect_AddProspectsBulkAsync",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "List of prospects to be imported",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ProspectBulkListCreate"
            }
          },
          {
            "name": "listId",
            "in": "query",
            "description": "Optional list ID to which all prospects will be added",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "campaignId",
            "in": "query",
            "description": "Optional campaign ID to add prospects to",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "addOnlyIfNew",
            "in": "query",
            "description": "If true, will only add prospects that are new in CRM",
            "required": false,
            "type": "boolean",
            "default": false
          },
          {
            "name": "notInOtherCampaign",
            "in": "query",
            "description": "If true, checks if prospect is in other campaigns",
            "required": false,
            "type": "boolean",
            "default": false
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "201": {
            "description": "Prospects added successfully",
            "schema": {
              "$ref": "#/definitions/ProspectImport"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/prospects": {
      "get": {
        "tags": [
          "Prospect"
        ],
        "summary": "Retrieves a list of prospects with optional filtering",
        "description": "Returns prospects for the authenticated organization with optional filters.\r\nSupports email-to-ID lookup via `?email=` parameter.\r\n            \r\nBehavior:\r\n- Authenticates API request\r\n- Applies optional filters (email, status, tags, search)\r\n- Returns paginated list of prospects as DTOs\r\n- When email filter is used, returns single prospect (for ID lookup)",
        "operationId": "ApiProspect_GetProspects",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "description": "Filter by exact email match (used for email-to-ID lookup)",
            "required": false,
            "type": "string"
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter by CRM status",
            "required": false,
            "type": "string",
            "enum": [
              "Unknown",
              "EspMatchNotFound",
              "EspNotAllowed",
              "NoWarmup",
              "NotReceiving",
              "WarmupLimits",
              "SendingLimits",
              "NoSender",
              "Stuck",
              "MailboxInexistent",
              "EmptySubject",
              "EmptyBody",
              "MissingPlaceholder",
              "Invalid",
              "Blacklisted",
              "Stopped",
              "Unsub",
              "BounceHard",
              "BounceSoft",
              "AutoNolonger",
              "AutoOoo",
              "AutoReply",
              "CollegueReplied",
              "SenderDisconnected",
              "Paused",
              "InsufficientCredit",
              "ScheduleInactive",
              "NotInterested",
              "NotSet",
              "Neutral",
              "MaybeLater",
              "Interested",
              "MeetingBooked",
              "MeetingCompleted",
              "Won",
              "Subbed"
            ]
          },
          {
            "name": "tags",
            "in": "query",
            "description": "Filter by tags (comma-separated)",
            "required": false,
            "type": "string"
          },
          {
            "name": "search",
            "in": "query",
            "description": "Search in email, first name, last name",
            "required": false,
            "type": "string"
          },
          {
            "name": "validationStatus",
            "in": "query",
            "description": "Filter by email validation verdict (Unvalidated, Valid, Invalid, CatchAll, Disposable, Unknown)",
            "required": false,
            "type": "string",
            "enum": [
              "Unvalidated",
              "Valid",
              "Invalid",
              "CatchAll",
              "Disposable",
              "Unknown"
            ]
          },
          {
            "name": "includeCampaignIds.campaignIds",
            "in": "query",
            "description": "Parameter: includeCampaignIds.campaignIds",
            "required": false,
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "collectionFormat": "multi",
            "type": "array"
          },
          {
            "name": "includeListIds.listIds",
            "in": "query",
            "description": "Parameter: includeListIds.listIds",
            "required": false,
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "collectionFormat": "multi",
            "type": "array"
          },
          {
            "name": "excludeCampaignIds.campaignIds",
            "in": "query",
            "description": "Parameter: excludeCampaignIds.campaignIds",
            "required": false,
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "collectionFormat": "multi",
            "type": "array"
          },
          {
            "name": "excludeListIds.listIds",
            "in": "query",
            "description": "Parameter: excludeListIds.listIds",
            "required": false,
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "collectionFormat": "multi",
            "type": "array"
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Prospects retrieved successfully",
            "schema": {
              "$ref": "#/definitions/ProspectPage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "post": {
        "tags": [
          "Prospect"
        ],
        "summary": "Creates a new prospect",
        "description": "Creates a single prospect in the CRM.\r\n            \r\nBehavior:\r\n- Authenticates API request\r\n- Validates required fields (email)\r\n- Checks for duplicate email\r\n- Uses the supplied baseListId, or creates/reuses the Unassigned list when omitted\r\n- Creates prospect record\r\n- Returns prospect details as DTO",
        "operationId": "ApiProspect_CreateProspect",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Prospect data (ApiV2ProspectCreate DTO)",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ProspectCreate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "201": {
            "description": "Prospect created successfully",
            "schema": {
              "$ref": "#/definitions/Prospect"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/prospects/{id}": {
      "get": {
        "tags": [
          "Prospect"
        ],
        "summary": "Gets a single prospect by ID",
        "description": "Retrieves a specific prospect by its ID.\r\nSupports optional includes via `?include=campaignIds,listIds,tagIds` parameter.\r\n            \r\nBehavior:\r\n- Authenticates API request\r\n- Validates prospect ID\r\n- Verifies prospect belongs to authenticated organization\r\n- Returns prospect details as DTO\r\n- Include parameter loads related entity IDs in single DB query",
        "operationId": "ApiProspect_GetProspectById",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The prospect ID",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          }
        ],
        "responses": {
          "200": {
            "description": "Prospect retrieved successfully",
            "schema": {
              "$ref": "#/definitions/Prospect"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Prospect"
        ],
        "summary": "Deletes a prospect",
        "description": "Deletes a prospect from the system.\r\n            \r\nBehavior:\r\n- Authenticates API request\r\n- Validates prospect ID\r\n- Verifies prospect belongs to authenticated organization\r\n- Deletes prospect and associated data",
        "operationId": "ApiProspect_DeleteProspect",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The prospect ID",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Prospect deleted successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Prospect"
        ],
        "summary": "Partially updates a prospect",
        "description": "Updates specified fields of a prospect. Only provided fields are updated.\r\nReplaces the deprecated /status/patch endpoint.\r\n            \r\nBehavior:\r\n- Authenticates API request\r\n- Validates prospect ID\r\n- Verifies prospect belongs to authenticated organization\r\n- Updates only provided fields\r\n- Returns updated prospect as DTO",
        "operationId": "ApiProspect_UpdateProspect",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The prospect ID",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          },
          {
            "name": "request",
            "in": "body",
            "description": "Fields to update (UpdateProspectRequest DTO - all fields optional)",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ProspectUpdate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Prospect updated successfully",
            "schema": {
              "$ref": "#/definitions/Prospect"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/prospects/{id}/tags": {
      "get": {
        "tags": [
          "Prospect"
        ],
        "summary": "Get all tags for a prospect",
        "description": "API endpoint for GetProspectTags",
        "operationId": "ApiProspect_GetProspectTags",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Prospect ID",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Tags retrieved successfully",
            "schema": {
              "$ref": "#/definitions/TagPage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "post": {
        "tags": [
          "Prospect"
        ],
        "summary": "Add a single tag to a prospect",
        "description": "API endpoint for AddProspectTags",
        "operationId": "ApiProspect_AddProspectTags",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Prospect ID",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          },
          {
            "name": "request",
            "in": "body",
            "description": "Request containing tag ID",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ProspectTagCreate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Tag added successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/prospects/{id}/tags/{tagId}": {
      "delete": {
        "tags": [
          "Prospect"
        ],
        "summary": "Remove a specific tag from a prospect",
        "description": "API endpoint for RemoveProspectTags",
        "operationId": "ApiProspect_RemoveProspectTags",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Prospect ID",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          },
          {
            "name": "tagId",
            "in": "path",
            "description": "Tag ID to remove",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Tag removed successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/prospects/{id}/messages": {
      "get": {
        "tags": [
          "Prospect"
        ],
        "summary": "Get message history for a prospect",
        "description": "Returns paginated message history for a prospect using DateTime-based cursor pagination.\r\nMessages are ordered by time chronologically.",
        "operationId": "ApiProspect_GetProspectMessages",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Prospect ID",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "Messages retrieved successfully",
            "schema": {
              "$ref": "#/definitions/MessagePage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/senders": {
      "get": {
        "tags": [
          "Sender"
        ],
        "summary": "Retrieves organization senders",
        "description": "Returns a paginated list of all senders (email accounts) configured for the authenticated organization with optional filtering.\r\n            \r\nBehavior:\r\n- Authenticates and validates organization context.\r\n- Handles filters: folder, status, warmup, search term.\r\n- Pages and orders results.\r\n- Returns paged list of sender account DTOs.",
        "operationId": "ApiSender_GetSendersAsync",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "folder",
            "in": "query",
            "description": "Filter by folder name.",
            "required": false,
            "type": "string",
            "default": ""
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter by status (e.g., \"error\").",
            "required": false,
            "type": "string",
            "default": ""
          },
          {
            "name": "warmup",
            "in": "query",
            "description": "Filter by warmup status.",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "search",
            "in": "query",
            "description": "Search by text (first/last/email).",
            "required": false,
            "type": "string"
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Senders retrieved successfully",
            "schema": {
              "$ref": "#/definitions/SenderPage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "post": {
        "tags": [
          "Sender"
        ],
        "summary": "Creates a sender",
        "description": "Creates a new sender account (email identity)\r\n\r\nBehavior:\r\n- Authenticates organization context.\r\n- Validates sender email, settings and existence.\r\n- Checks for limits and duplicates.\r\n- Creates new sender.\r\n- Persists and returns result or errors.",
        "operationId": "ApiSender_CreateSenderAsync",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Sender configuration including email, password, and settings.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SenderCreate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "201": {
            "description": "Sender created successfully",
            "schema": {
              "$ref": "#/definitions/Sender"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/senders/{id}": {
      "get": {
        "tags": [
          "Sender"
        ],
        "summary": "Gets sender by ID",
        "description": "Retrieves detailed info for a sender by unique sender ID.\r\n\r\nBehavior:\r\n- Authenticates request.\r\n- Validates sender ID.\r\n- Checks sender belongs to the organization.\r\n- Returns sender DTO or error if not found.",
        "operationId": "ApiSender_GetSenderByIdAsync",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the sender to retrieve.",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          }
        ],
        "responses": {
          "200": {
            "description": "Sender details retrieved successfully",
            "schema": {
              "$ref": "#/definitions/Sender"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Sender"
        ],
        "summary": "Delete Sender",
        "description": "Deletes (deactivates) a sender email account from the current organization.\r\n\r\nBehavior:\r\n- Authenticates API/org context.\r\n- Validates sender ID and removes it from active senders.\r\n- Also removes from warm-up campaign if present.\r\n- Returns success or error result.",
        "operationId": "ApiSender_DeleteSenderAsync",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the sender to be deleted.",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Sender deleted successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Sender"
        ],
        "summary": "Update Sender",
        "description": "Updates editable properties on an existing sender account.\r\n\r\nBehavior:\r\n- Authenticates request and validates sender ID.\r\n- Checks sender belongs to org; skips forbidden changes.\r\n- Applies allowed field changes only.\r\n- Persists and returns update result or validation errors.",
        "operationId": "ApiSender_UpdateSenderAsync",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "The sender details to update",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SenderUpdate"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the sender to update.",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          }
        ],
        "responses": {
          "200": {
            "description": "Sender updated successfully",
            "schema": {
              "$ref": "#/definitions/Sender"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/senders/{id}/errors": {
      "get": {
        "tags": [
          "Sender"
        ],
        "summary": "Get all errors by senderID",
        "description": "Returns error logs associated with a sender account.\r\n\r\nBehavior:\r\n- Authenticates and checks sender ID.\r\n- Gets error records for sender.\r\n- Returns all matching errors or not found if none.",
        "operationId": "ApiSender_GetSendersErrors",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the sender to retrieve error.",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          }
        ],
        "responses": {
          "200": {
            "description": "Sender errors retrieved successfully",
            "schema": {
              "$ref": "#/definitions/ErrorPage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/senders/{id}/tags": {
      "post": {
        "tags": [
          "Sender"
        ],
        "summary": "Add a single tag to a sender",
        "description": "API endpoint for AddSenderTagsAsync",
        "operationId": "ApiSender_AddSenderTagsAsync",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Sender ID",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          },
          {
            "name": "request",
            "in": "body",
            "description": "Request containing tag ID",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SenderTagCreate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Tag added successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/senders/{id}/tags/{tagId}": {
      "delete": {
        "tags": [
          "Sender"
        ],
        "summary": "Remove a specific tag from a sender",
        "description": "API endpoint for RemoveSenderTagsAsync",
        "operationId": "ApiSender_RemoveSenderTagsAsync",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Sender ID",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          },
          {
            "name": "tagId",
            "in": "path",
            "description": "Tag ID to remove",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Tag removed successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/sequences/{id}": {
      "delete": {
        "tags": [
          "Sequence"
        ],
        "summary": "Deletes sequence",
        "description": "Deletes a sequence by ID for the authenticated organization and campaign (soft delete, also removes followups).\r\n            \r\nBehavior:\r\n- Validates API key (header/query), sequence ID, campaign/sequence existence and ownership.\r\n- Performs soft delete on sequence and all related followups.\r\n- Clears related caches and returns deleted sequence or error result.",
        "operationId": "ApiSequence_DeleteSequence",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "sequences ID for delete campaignsequences",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Sequence deleted successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Sequence"
        ],
        "summary": "Patch sequence",
        "description": "Updates supplied fields for a sequence owned by the authenticated organization.\r\n            \r\nBehavior:\r\n- Validates API key and sequence ID.\r\n- Checks ownership through campaign and organization.\r\n- Performs partial update on non-null valid fields only.\r\n- Logs changes, clears caches, returns update result or appropriate error.\r\n- Legacy rows can read back conditionAction / conditionOperator as null, but an explicit null cannot be written back:\r\n  omit the field to leave it unchanged, or send a valid value to set it.",
        "operationId": "ApiSequence_UpdateSequence",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "sequences ID for update campaignsequences",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          },
          {
            "name": "request",
            "in": "body",
            "description": "CampaignSequence object for update.\r\nOnly minimal information is required; the system will set required fields.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SequenceUpdate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Sequence updated successfully",
            "schema": {
              "$ref": "#/definitions/Sequence"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/sequences/{id}/followups": {
      "get": {
        "tags": [
          "Sequence"
        ],
        "summary": "Retrieves all follow-ups for a specific sequence",
        "description": "Returns all follow-ups associated with the specified sequence for the authenticated organization.\r\n            \r\nBehavior:\r\n- Validates API key and organization.\r\n- Verifies sequence and related campaign exist and are owned by the org.\r\n- Retrieves all follow-ups for the sequence and maps to response.\r\n- If none, returns empty list; otherwise returns full list of follow-ups. Handles all error branches.",
        "operationId": "ApiSequence_GetSequenceFollowups",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Sequence ID for get all sequence followups",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          }
        ],
        "responses": {
          "200": {
            "description": "Followups retrieved successfully",
            "schema": {
              "$ref": "#/definitions/FollowupPage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "post": {
        "tags": [
          "Sequence"
        ],
        "summary": "Creates a new follow-up in a sequence",
        "description": "Creates and attaches a new follow-up to the given sequence in the authenticated organization.\r\n            \r\nBehavior:\r\n- Validates API key, sequence ID, and input body.\r\n- Checks sequence/campaign existence and ownership.\r\n- Verifies org-specific follow-up limits.\r\n- Persists follow-up and clears relevant cache.\r\n- Returns created follow-up or error code as appropriate.",
        "operationId": "ApiSequence_CreateFollowup",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Sequence ID for create sequence followups",
            "required": true,
            "type": "integer",
            "format": "int64",
            "maximum": 9.2233720368547758E+18,
            "minimum": 1.0
          },
          {
            "name": "request",
            "in": "body",
            "description": "followup object for create followup.\r\nOnly minimal information is required; the system will set required fields.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FollowupCreate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "201": {
            "description": "Followup created successfully",
            "schema": {
              "$ref": "#/definitions/Followup"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/tags": {
      "get": {
        "tags": [
          "Tags"
        ],
        "summary": "Gets a list of tags with optional filtering and search",
        "description": "Retrieves all tags for the authenticated organization with optional filters.\r\n            \r\nBehavior:\r\n- Authenticates API request\r\n- Applies optional search filter (case-insensitive substring match)\r\n- Optionally includes prospect count via include=prospectCount\r\n- Returns paginated list of tags",
        "operationId": "Api2Tag_GetTags",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "description": "Optional case-insensitive search term for tag name",
            "required": false,
            "type": "string"
          },
          {
            "name": "tagType",
            "in": "query",
            "description": "Optional filter: Crm, Campaign, or Sender (matches EM_TAG.TagType)",
            "required": false,
            "type": "string"
          },
          {
            "name": "include",
            "in": "query",
            "description": "Comma-separated list of additional data to include (e.g., \"prospectCount\")",
            "required": false,
            "type": "string"
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Tags retrieved successfully",
            "schema": {
              "$ref": "#/definitions/TagPage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "post": {
        "tags": [
          "Tags"
        ],
        "summary": "Creates a new tag",
        "description": "Creates a new tag for the authenticated organization.\r\n            \r\nBehavior:\r\n- Authenticates API request\r\n- Validates tag title is unique within organization (case-insensitive)\r\n- Creates new tag\r\n- Returns created tag details",
        "operationId": "Api2Tag_CreateTag",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Tag creation request with title and optional description",
            "required": true,
            "schema": {
              "$ref": "#/definitions/TagCreate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "201": {
            "description": "Tag created successfully",
            "schema": {
              "$ref": "#/definitions/Tag"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/tags/{id}": {
      "get": {
        "tags": [
          "Tags"
        ],
        "summary": "Gets a single tag by ID",
        "description": "Retrieves details of a specific tag.\r\n            \r\nBehavior:\r\n- Authenticates API request\r\n- Validates tag belongs to authenticated organization\r\n- Optionally includes prospect count via include=prospectCount\r\n- Returns tag details",
        "operationId": "Api2Tag_GetTagById",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Tag ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Tag retrieved successfully",
            "schema": {
              "$ref": "#/definitions/Tag"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Tags"
        ],
        "summary": "Deletes a tag",
        "description": "Deletes a tag from the organization.\r\n            \r\nBehavior:\r\n- Authenticates API request\r\n- Validates tag exists and belongs to authenticated organization\r\n- If force=false (default): Fails with 409 CONFIRMATION_REQUIRED when tag has active prospect, campaign, or sender assignments\r\n- If force=true: Cascade deletes all tag assignments (prospects, campaigns, senders) and then deletes the tag\r\n- Returns 204 No Content on successful deletion",
        "operationId": "Api2Tag_DeleteTag",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Tag ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "force",
            "in": "query",
            "description": "If true, force delete even when tag has assignments (cascade delete relationships). Default: false",
            "required": false,
            "type": "boolean",
            "default": false
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Tag deleted successfully"
          },
          "409": {
            "description": "Confirmation required - tag has active assignments; retry with force=true"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Tags"
        ],
        "summary": "Updates an existing tag's title and description",
        "description": "Updates the title and description of an existing tag.\r\n            \r\nBehavior:\r\n- Authenticates API request\r\n- Validates tag exists and belongs to authenticated organization\r\n- Validates new title is unique within organization (case-insensitive)\r\n- Updates tag title and description\r\n- Returns updated tag details",
        "operationId": "Api2Tag_UpdateTag",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Tag ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "request",
            "in": "body",
            "description": "Tag update request with new title and optional description",
            "required": true,
            "schema": {
              "$ref": "#/definitions/TagUpdate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Tag updated successfully",
            "schema": {
              "$ref": "#/definitions/Tag"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/tags/{id}/campaigns": {
      "get": {
        "tags": [
          "Tags"
        ],
        "summary": "Gets all campaigns that have this tag",
        "description": "Retrieves a paginated list of campaigns with the specified tag.\r\n            \r\nBehavior:\r\n- Authenticates API request\r\n- Validates tag belongs to authenticated organization\r\n- Returns paginated list of campaigns with this tag",
        "operationId": "Api2Tag_GetTagCampaigns",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Tag ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Campaigns retrieved successfully",
            "schema": {
              "$ref": "#/definitions/CampaignPage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/tags/{id}/senders": {
      "get": {
        "tags": [
          "Tags"
        ],
        "summary": "Gets all senders that have this tag",
        "description": "Retrieves a paginated list of senders with the specified tag.\r\n            \r\nBehavior:\r\n- Authenticates API request\r\n- Validates tag belongs to authenticated organization\r\n- Returns paginated list of senders with this tag",
        "operationId": "Api2Tag_GetTagSenders",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Tag ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Senders retrieved successfully",
            "schema": {
              "$ref": "#/definitions/SenderPage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/tags/{id}/prospects": {
      "get": {
        "tags": [
          "Tags"
        ],
        "summary": "Gets all prospects that have this tag",
        "description": "Retrieves a paginated list of prospects with the specified tag.\r\n            \r\nBehavior:\r\n- Authenticates API request\r\n- Validates tag belongs to authenticated organization\r\n- Returns paginated list of prospects with this tag",
        "operationId": "Api2Tag_GetTagProspects",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Tag ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Prospects retrieved successfully",
            "schema": {
              "$ref": "#/definitions/ProspectPage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/users": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Get all users",
        "description": "Retrieves all users for the authenticated organization with pagination support.\r\n\r\nBehavior:\r\n- Authenticates and validates API key/organization.\r\n- Checks permissions and agency/whitelabel rules.\r\n- Supports pagination via page + limit params.\r\n- Returns paginated user data or empty result if none.",
        "operationId": "Api2User_GetUsers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "string",
            "format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "Users retrieved successfully",
            "schema": {
              "$ref": "#/definitions/UserPage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "post": {
        "tags": [
          "User"
        ],
        "summary": "Create new user",
        "description": "Registers a new user account or edits existing based on guid.\r\n\r\nBehavior:\r\n- Authenticates API and organization context.\r\n- Validates request data and permissions to create/edit.\r\n- Checks per-organization user limits.\r\n- Registers or edits user details as needed.\r\n- Returns created user info.",
        "operationId": "Api2User_CreateUserAsync",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "User object to create or update. Minimal info required; system sets fields as needed.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/UserCreate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "201": {
            "description": "User created successfully",
            "schema": {
              "$ref": "#/definitions/User"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/users/{id}": {
      "get": {
        "tags": [
          "User"
        ],
        "summary": "Get user by id",
        "description": "Retrieves a specific user's details by GUID for the authenticated organization.\r\n\r\nBehavior:\r\n- Authenticates and validates API key/org.\r\n- Verifies user permissions vs. agency/whitelabel.\r\n- Looks up user by id and org.\r\n- Returns user DTO or error if not found/inaccessible.",
        "operationId": "Api2User_GetUserByID",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Unique identifier of the User to retrieve.",
            "required": true,
            "type": "string",
            "format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "User retrieved successfully",
            "schema": {
              "$ref": "#/definitions/User"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "delete": {
        "tags": [
          "User"
        ],
        "summary": "Delete user",
        "description": "Deletes a user from the organization by GUID.\r\n\r\nBehavior:\r\n- Authenticates API/org context and permissions.\r\n- Validates GUID and ensures user exists and is allowed to be deleted.\r\n- Sets deleted/inactive and saves.\r\n- Removes from cache and returns status.",
        "operationId": "Api2User_DeleteUser",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "User GUID targeted for deletion.",
            "required": true,
            "type": "string",
            "format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "User deleted successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "patch": {
        "tags": [
          "User"
        ],
        "summary": "Update user",
        "description": "Updates one or more fields of an existing user for the authenticated organization.\r\n\r\nBehavior:\r\n- Authenticates API/org context and permissions.\r\n- Validates non-empty GUID and patch body.\r\n- Checks canAdminOrg security on user.\r\n- Applies/updates non-null user fields, including permissions, name, subscription.\r\n- Persists and returns updated fields or errors.",
        "operationId": "Api2User_UpdateUser",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "User patch data containing only the fields to update.",
            "required": true,
            "schema": {
              "$ref": "#/definitions/UserUpdate"
            }
          },
          {
            "name": "id",
            "in": "path",
            "description": "The ID of the user to update.",
            "required": true,
            "type": "string",
            "format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "User updated successfully",
            "schema": {
              "$ref": "#/definitions/User"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/validation/emails": {
      "post": {
        "tags": [
          "Validation"
        ],
        "summary": "Validate emails",
        "description": "Raw emails that do not exist in CRM are created as prospects first, then queued for validation.\r\nValidation results are written to the prospect's validation fields when the platform webhook completes.",
        "operationId": "Api2Validation_SubmitEmails",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Parameter: request",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ValidationSubmitRequest"
            }
          }
        ],
        "responses": {
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "202": {
            "description": "Validation batch accepted",
            "schema": {
              "$ref": "#/definitions/ValidationSubmitResponse"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/validation/batches/{batchId}": {
      "get": {
        "tags": [
          "Validation"
        ],
        "summary": "Get validation batch status",
        "description": "API endpoint for GetBatchStatus",
        "operationId": "Api2Validation_GetBatchStatus",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "batchId",
            "in": "path",
            "description": "Parameter: batchId",
            "required": true,
            "type": "string",
            "format": "uuid"
          }
        ],
        "responses": {
          "200": {
            "description": "Validation batch status retrieved",
            "schema": {
              "$ref": "#/definitions/ValidationBatchStatus"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/whitelabel": {
      "patch": {
        "tags": [
          "Whitelabel"
        ],
        "summary": "Update whitelabel settings",
        "description": "Updates whitelabel-related appearance and domain settings for the authenticated organization.\r\n\r\nBehavior:\r\n- Authenticates via API key and verifies permissions (must be org admin)\r\n- Validates supplied image data (logo), color, and custom domain parameters\r\n- Saves new logo (if provided)\r\n- Updates color theme and custom domain as supplied\r\n- Handles error and permission scenarios as needed\r\n- Logo image as Base64 data (required for logo update)\r\n- Color code for header (optional)\r\n- Domain value to associate (optional)",
        "operationId": "Api2Whitelabel_UpdateWhiteLabelSetting",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Parameter: request",
            "required": true,
            "schema": {
              "$ref": "#/definitions/WhitelabelUpdate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Whitelabel updated successfully",
            "schema": {
              "$ref": "#/definitions/Whitelabel"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/workspaces": {
      "get": {
        "tags": [
          "Workspace"
        ],
        "summary": "Get all workspaces",
        "description": "Retrieves all workspaces (subaccounts) for the authenticated agency organization.\r\n\r\nBehavior:\r\n- Authenticates request and confirms parent org context.\r\n- Rejects if called from workspace account.\r\n- Returns workspace DTOs mapped from the organization list.",
        "operationId": "Api2Workspace_GetAllWorkspace",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Page number (1-indexed, default: 1)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (default: 100, max: 1000)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "maximum": 1000,
            "minimum": 1
          },
          {
            "name": "startingAfter",
            "in": "query",
            "description": "Cursor for next page (optional, for cursor-based pagination)",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Workspaces retrieved successfully",
            "schema": {
              "$ref": "#/definitions/WorkspacePage"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "post": {
        "tags": [
          "Workspace"
        ],
        "summary": "Create a new workspace",
        "description": "Creates a new workspace (subaccount) under the calling agency org.\r\n\r\nBehavior:\r\n- Authenticates parent org context.\r\n- Verifies not called from workspace/subaccount.\r\n- Checks for title uniqueness, agency limits, and general access.\r\n- Creates/workspace and applies limits; invalidates caches.",
        "operationId": "Api2Workspace_CreateWorkspace",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Request body containing workspace title (required)",
            "required": true,
            "schema": {
              "$ref": "#/definitions/WorkspaceCreate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "201": {
            "description": "Workspace created successfully",
            "schema": {
              "$ref": "#/definitions/Workspace"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/workspaces/{id}": {
      "get": {
        "tags": [
          "Workspace"
        ],
        "summary": "Get a workspace by Id.",
        "description": "Retrieves a specific workspace by id, if owned by the caller's organization.\r\n\r\nBehavior:\r\n- Authenticates request and confirms parent org.\r\n- Checks organization/ownership rules using agency ID.\r\n- Returns workspace details DTO or error.",
        "operationId": "Api2Workspace_GetWorkspaceById",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The unique identifier of the workspace to retrieve.",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Workspace retrieved successfully",
            "schema": {
              "$ref": "#/definitions/Workspace"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Workspace"
        ],
        "summary": "Delete a workspace",
        "description": "Deletes a workspace (subaccount) for the parent agency org.\r\n\r\nBehavior:\r\n- Authenticates agency/parent context and permissions.\r\n- Verifies org/subaccount belongs to agency.\r\n- Soft-deletes subaccount and invalidates caches.\r\n- Returns result or relevant error.",
        "operationId": "Api2Workspace_DeleteWorkspace",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Target workspace OrganizationID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          },
          "204": {
            "description": "Workspace deleted successfully"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Workspace"
        ],
        "summary": "Update an workspace",
        "description": "Updates the title of a workspace (organization) for agency-owned orgs.\r\n\r\nBehavior:\r\n- Authenticates/authorizes agency context.\r\n- Looks up org; ensures org belongs to agency.\r\n- Verifies new title is not a duplicate among siblings.\r\n- Only updates the title.",
        "operationId": "Api2Workspace_UpdateWorkspace",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Target workspace OrganizationID (required).",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "request",
            "in": "body",
            "description": "Request body containing new title (required).",
            "required": true,
            "schema": {
              "$ref": "#/definitions/WorkspaceUpdate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Workspace updated successfully",
            "schema": {
              "$ref": "#/definitions/Workspace"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    },
    "/api/v2/workspaces/{id}/credits": {
      "get": {
        "tags": [
          "Workspace"
        ],
        "summary": "Get workspace credits",
        "description": "Retrieves the sending credit balance of a workspace with an explicit creditMode discriminator.\r\n            \r\nBehavior:\r\n- Authenticates via API key\r\n- The main account can read any of its workspaces; a workspace can read its own balance\r\n- creditMode 'separate': balance is the workspace's own credit pool\r\n- creditMode 'shared': balance is the effective value (remaining monthly allocation when auto-allocation is enabled, otherwise the main account balance)\r\n- mainAccountBalance is populated only for the main-account caller; on a workspace self-read it is null",
        "operationId": "Api2Workspace_GetWorkspaceCredits",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Workspace (Organization) ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Workspace credit status retrieved successfully",
            "schema": {
              "$ref": "#/definitions/WorkspaceCreditStatus"
            }
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      },
      "post": {
        "tags": [
          "Workspace"
        ],
        "summary": "Allocate workspace credits",
        "description": "Moves sending credits from the authenticated main account to a workspace with separate credits.\r\n            \r\nBehavior:\r\n- Authenticates via API key; only the main account can allocate\r\n- Only workspaces with separate credits are eligible; shared-credit workspaces are rejected\r\n- Credits the workspace first, then debits the main account; a failed main-account debit is reversed on the workspace\r\n- externalReference makes the request idempotent per main account: a replay returns 200 with the original allocation fields and current balances instead of moving credits again\r\n- A blank or whitespace externalReference is treated as omitted (no idempotency key)\r\n- Reusing an externalReference with a different workspace or amount is rejected with 422; each reference identifies exactly one allocation\r\n- A replayed failed allocation is returned as-is (status 'failed'), never re-executed; retry with a new reference once the cause is fixed\r\n- A replayed 'pending' allocation older than 15 minutes is returned as 'failed': the original request crashed before completing. It may have crashed AFTER moving credits, so verify the workspace balance via GET /api/v2/workspaces/{id}/credits before retrying with a new reference",
        "operationId": "Api2Workspace_AllocateWorkspaceCredits",
        "consumes": [
          "application/json",
          "text/json",
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Workspace (Organization) ID",
            "required": true,
            "type": "integer",
            "format": "int32",
            "maximum": 2147483647,
            "minimum": 1
          },
          {
            "name": "request",
            "in": "body",
            "description": "Credit allocation request object",
            "required": true,
            "schema": {
              "$ref": "#/definitions/WorkspaceCreditAllocationCreate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Idempotent replay: the allocation for this externalReference already exists and is returned unchanged",
            "schema": {
              "$ref": "#/definitions/WorkspaceCreditAllocation"
            }
          },
          "201": {
            "description": "Credits allocated successfully",
            "schema": {
              "$ref": "#/definitions/WorkspaceCreditAllocation"
            }
          },
          "402": {
            "description": "Insufficient sending credits on the main account (INSUFFICIENT_SENDING_CREDITS)"
          },
          "406": {
            "description": "Missing required header - X-API-Key header is required",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "401": {
            "description": "Authentication failed - Invalid, expired, or empty API key",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "400": {
            "description": "Bad request - Malformed request or invalid syntax",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "422": {
            "description": "Validation failed - One or more fields are invalid",
            "schema": {
              "$ref": "#/definitions/ApiErrorValidation"
            }
          },
          "429": {
            "description": "Rate limit exceeded - Too many requests",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "403": {
            "description": "Plan required - Feature not available on your current plan",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "500": {
            "description": "Internal server error - An unexpected error occurred",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "404": {
            "description": "Resource not found - The requested resource does not exist or you don't have access",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "409": {
            "description": "Resource conflict - Duplicate resource or constraint violation",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          },
          "415": {
            "description": "Unsupported media type - Content-Type must be application/json",
            "schema": {
              "$ref": "#/definitions/ApiErrorGeneric"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "AccountContext": {
      "description": "Account context associated with the authenticated API key.",
      "properties": {
        "keyType": {
          "description": "Scope of the API key: organization, workspace, or clientspace.",
          "type": "string"
        },
        "id": {
          "description": "Identifier of the account associated with the API key.",
          "type": "integer",
          "format": "int32"
        },
        "title": {
          "description": "Display title of the account associated with the API key.",
          "type": "string"
        },
        "createdAt": {
          "description": "Timestamp when the account was created, or null when unknown.",
          "type": "string",
          "format": "date-time"
        },
        "parentOrganization": {
          "$ref": "#/definitions/ParentOrganization",
          "description": "Parent organization for workspace and clientspace keys; otherwise null."
        }
      },
      "xml": {
        "name": "Api2AccountContext"
      },
      "type": "object"
    },
    "Api2BlacklistCheckResponse": {
      "description": "Response for check endpoints (email or domain blacklisted).",
      "properties": {
        "value": {
          "type": "string"
        },
        "blacklisted": {
          "type": "boolean"
        }
      },
      "xml": {
        "name": "Api2BlacklistCheckResponse"
      },
      "type": "object"
    },
    "Api2BlacklistDomain": {
      "description": "Single domain blacklist entry (domain without @ prefix).",
      "properties": {
        "blockId": {
          "type": "integer",
          "format": "int64"
        },
        "domain": {
          "type": "string"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time"
        }
      },
      "xml": {
        "name": "Api2BlacklistDomain"
      },
      "type": "object"
    },
    "Api2BlacklistDomainPage": {
      "description": "Paginated list of domain blacklist entries.",
      "properties": {
        "items": {
          "description": "Array of items in the current page",
          "items": {
            "$ref": "#/definitions/Api2BlacklistDomain"
          },
          "xml": {
            "name": "Api2BlacklistDomain",
            "wrapped": true
          },
          "type": "array"
        },
        "pagination": {
          "$ref": "#/definitions/PaginationInteger",
          "description": "Pagination metadata with typed primary key support"
        }
      },
      "xml": {
        "name": "Api2BlacklistDomainPage"
      },
      "type": "object"
    },
    "Api2BlacklistDomainsAddRequest": {
      "description": "Request to add one or more domains to the blacklist.",
      "required": [
        "domains"
      ],
      "properties": {
        "domains": {
          "description": "One or more domains to blacklist (with or without @ prefix).",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "xml": {
        "name": "Api2BlacklistDomainsAddRequest"
      },
      "type": "object"
    },
    "Api2BlacklistEmail": {
      "description": "Single email blacklist entry (full email address).",
      "properties": {
        "blockId": {
          "type": "integer",
          "format": "int64"
        },
        "email": {
          "type": "string"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time"
        }
      },
      "xml": {
        "name": "Api2BlacklistEmail"
      },
      "type": "object"
    },
    "Api2BlacklistEmailAddResult": {
      "description": "Result for a single email submitted to the blacklist add endpoint.",
      "properties": {
        "email": {
          "description": "Normalized email address.",
          "type": "string"
        },
        "added": {
          "description": "True when the email was newly added to the blacklist.",
          "type": "boolean"
        },
        "reason": {
          "description": "Reason the email was skipped, when not added.",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2BlacklistEmailAddResult"
      },
      "type": "object"
    },
    "Api2BlacklistEmailPage": {
      "description": "Paginated list of email blacklist entries.",
      "properties": {
        "items": {
          "description": "Array of items in the current page",
          "items": {
            "$ref": "#/definitions/Api2BlacklistEmail"
          },
          "xml": {
            "name": "Api2BlacklistEmail",
            "wrapped": true
          },
          "type": "array"
        },
        "pagination": {
          "$ref": "#/definitions/PaginationInteger",
          "description": "Pagination metadata with typed primary key support"
        }
      },
      "xml": {
        "name": "Api2BlacklistEmailPage"
      },
      "type": "object"
    },
    "Api2BlacklistEmailsAddRequest": {
      "description": "Request to add one or more emails to the blacklist.",
      "required": [
        "emails"
      ],
      "properties": {
        "emails": {
          "description": "One or more full email addresses to blacklist.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "xml": {
        "name": "Api2BlacklistEmailsAddRequest"
      },
      "type": "object"
    },
    "Api2BlacklistEmailsAddResponse": {
      "description": "Response returned after adding emails to the blacklist.",
      "properties": {
        "added": {
          "description": "Number of emails newly added to the blacklist.",
          "type": "integer",
          "format": "int32"
        },
        "emails": {
          "description": "Normalized valid emails submitted in the request.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "skippedEmailCount": {
          "description": "Number of valid submitted emails skipped because they were already blacklisted.",
          "type": "integer",
          "format": "int32"
        },
        "results": {
          "description": "Per-email add or skip result.",
          "items": {
            "$ref": "#/definitions/Api2BlacklistEmailAddResult"
          },
          "xml": {
            "name": "Api2BlacklistEmailAddResult",
            "wrapped": true
          },
          "type": "array"
        }
      },
      "xml": {
        "name": "Api2BlacklistEmailsAddResponse"
      },
      "type": "object"
    },
    "Api2CampaignListQuery": {
      "description": "Query parameters for GET /api/v2/campaigns list.",
      "properties": {
        "includeArchived": {
          "description": "When false (default), rows with CampStatus archived are excluded unless Status is set to archived.",
          "type": "boolean"
        },
        "status": {
          "description": "Optional exact CampStatus filter (case-insensitive), e.g. running, paused, draft, completed, archived, scheduled, preparing.",
          "type": "string"
        },
        "page": {
          "description": "Page number (1-indexed, default: 1)",
          "type": "integer",
          "format": "int32",
          "maximum": 2147483647,
          "minimum": 1
        },
        "limit": {
          "description": "Items per page (default: 100, max: 1000)",
          "type": "integer",
          "format": "int32",
          "maximum": 1000,
          "minimum": 1
        },
        "startingAfter": {
          "description": "Cursor for next page (optional, for cursor-based pagination)",
          "type": "integer",
          "format": "int64"
        }
      },
      "xml": {
        "name": "Api2CampaignListQuery"
      },
      "type": "object"
    },
    "api2ExcludeCampaignIds": {
      "properties": {
        "campaignIds": {
          "items": {
            "type": "integer",
            "format": "int32"
          },
          "type": "array"
        }
      },
      "xml": {
        "name": "api2ExcludeCampaignIds"
      },
      "type": "object"
    },
    "api2ExcludeListIds": {
      "properties": {
        "listIds": {
          "items": {
            "type": "integer",
            "format": "int32"
          },
          "type": "array"
        }
      },
      "xml": {
        "name": "api2ExcludeListIds"
      },
      "type": "object"
    },
    "api2IncludeCampaignIds": {
      "properties": {
        "campaignIds": {
          "items": {
            "type": "integer",
            "format": "int32"
          },
          "type": "array"
        }
      },
      "xml": {
        "name": "api2IncludeCampaignIds"
      },
      "type": "object"
    },
    "api2IncludeListIds": {
      "properties": {
        "listIds": {
          "items": {
            "type": "integer",
            "format": "int32"
          },
          "type": "array"
        }
      },
      "xml": {
        "name": "api2IncludeListIds"
      },
      "type": "object"
    },
    "Api2TagRef": {
      "description": "Minimal tag shape embedded on campaign, sender, and prospect list/detail responses (camelCase: id, name).",
      "properties": {
        "id": {
          "type": "integer",
          "format": "int32"
        },
        "name": {
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2TagRef"
      },
      "type": "object"
    },
    "ApiErrorGeneric": {
      "description": "Standard error response following RFC 7807 Problem Details for HTTP APIs.\r\nTechnical metadata (timestamps, request IDs) is in HTTP headers, not body.",
      "properties": {
        "type": {
          "description": "Machine-readable error type/code (e.g., \"VALIDATION_ERROR\", \"NOT_FOUND\")",
          "type": "string"
        },
        "title": {
          "description": "Short, human-readable summary of the problem",
          "type": "string"
        },
        "status": {
          "description": "HTTP status code (yes, redundant with HTTP, but RFC 7807 includes it for logging convenience)",
          "type": "integer",
          "format": "int32"
        },
        "detail": {
          "description": "Detailed explanation of the problem",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2ErrorGeneric"
      },
      "type": "object"
    },
    "ApiErrorValidation": {
      "description": "Validation error response extending ProblemDetails with field-level error details",
      "properties": {
        "errors": {
          "description": "Array of field-level validation errors",
          "items": {
            "$ref": "#/definitions/ApiErrorValidationItem"
          },
          "xml": {
            "name": "Api2ErrorValidationItem",
            "wrapped": true
          },
          "type": "array"
        },
        "type": {
          "description": "Machine-readable error type/code (e.g., \"VALIDATION_ERROR\", \"NOT_FOUND\")",
          "type": "string"
        },
        "title": {
          "description": "Short, human-readable summary of the problem",
          "type": "string"
        },
        "status": {
          "description": "HTTP status code (yes, redundant with HTTP, but RFC 7807 includes it for logging convenience)",
          "type": "integer",
          "format": "int32"
        },
        "detail": {
          "description": "Detailed explanation of the problem",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2ErrorValidation"
      },
      "type": "object"
    },
    "ApiErrorValidationItem": {
      "description": "Individual field validation error",
      "properties": {
        "field": {
          "description": "Name of the field that failed validation",
          "type": "string"
        },
        "message": {
          "description": "Human-readable error message for this field",
          "type": "string"
        },
        "attemptedValue": {
          "description": "The invalid value that was attempted (optional, useful for debugging)"
        }
      },
      "xml": {
        "name": "Api2ErrorValidationItem"
      },
      "type": "object"
    },
    "Campaign": {
      "description": "Campaign object represents a result/response for campaign resource. Campaign is the top-most concept in cold-email\r\nsending and orchestrates email delivery to prospects with configurable scheduling, daily limits, and sender rotation.\r\nCampaign contains an initial email plus multiple followups and sequences. Supports day-of-week scheduling, ESP matching,\r\nprogressive daily limit increases, and comprehensive statistics tracking.",
      "properties": {
        "campaignId": {
          "description": "Unique identifier for the email campaign.",
          "type": "integer",
          "format": "int32"
        },
        "createdAt": {
          "description": "Timestamp when the campaign was created in the system.",
          "type": "string",
          "format": "date-time"
        },
        "folderId": {
          "description": "Folder identifier for organizing and grouping campaigns; must be a positive integer.",
          "type": "integer",
          "format": "int32"
        },
        "status": {
          "description": "Current campaign status (e.g., 'draft', 'active', 'paused', 'completed').",
          "type": "string",
          "enum": [
            "Draft",
            "Running",
            "Paused",
            "Completed",
            "Archived",
            "Warning",
            "Blocked",
            "Scheduled",
            "Preparing"
          ]
        },
        "name": {
          "description": "Campaign display name for identification and organization; maximum 256 characters.",
          "type": "string"
        },
        "description": {
          "description": "Optional description explaining the purpose or goal of this campaign; maximum 512 characters.",
          "type": "string"
        },
        "fromEmails": {
          "description": "Comma-separated list of sender email addresses to use for sending campaign emails.",
          "type": "string"
        },
        "fromName": {
          "description": "Display name shown in the From field of campaign emails; maximum 128 characters.",
          "type": "string"
        },
        "replyToEmail": {
          "description": "Reply-to email address for prospect responses; must be valid email format with maximum 128 characters.",
          "type": "string"
        },
        "subject": {
          "description": "Email subject line for the initial campaign email; maximum 4,000 characters.",
          "type": "string"
        },
        "body": {
          "description": "HTML email body content for the initial campaign message.",
          "type": "string"
        },
        "textOnlyEmails": {
          "description": "Send emails in plain text format only without HTML formatting.",
          "type": "boolean"
        },
        "ccEmails": {
          "description": "Comma-separated list of email addresses to include as CC (carbon copy) recipients on all campaign emails.",
          "type": "string"
        },
        "bccEmails": {
          "description": "Comma-separated list of email addresses to include as BCC (blind carbon copy) recipients on all campaign emails.",
          "type": "string"
        },
        "replyBccEmails": {
          "description": "Comma-separated list of email addresses to BCC on prospect reply emails for internal tracking.",
          "type": "string"
        },
        "replyCcEmails": {
          "description": "Comma-separated list of email addresses to CC on prospect reply emails for internal tracking.",
          "type": "string"
        },
        "sendUnsubscribeListHeader": {
          "description": "Include List-Unsubscribe email header for compliance with email client unsubscribe features.",
          "type": "boolean"
        },
        "deactivateIfMissingPlaceholder": {
          "description": "Automatically deactivate prospect from campaign if required email placeholder/merge tag is missing from their data.",
          "type": "boolean"
        },
        "stopCoworkersOnReply": {
          "description": "Stop sending campaign emails to other team members (coworkers) targeting the same prospect when one receives a reply.",
          "type": "boolean"
        },
        "trackOpens": {
          "description": "Enable tracking of email opens using pixel tracking.",
          "type": "boolean"
        },
        "trackClicks": {
          "description": "Enable tracking of link clicks by replacing URLs with tracking redirects.",
          "type": "boolean"
        },
        "prospectValue": {
          "description": "Estimated monetary value per prospect conversion for ROI tracking; must be a positive integer.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimit": {
          "description": "Maximum number of emails this campaign can send per day; must be between 1 and 10,000.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimitPer": {
          "description": "Scope for applying the daily limit: 'sender' applies limit per sender account, 'campaign' applies limit across entire\r\ncampaign.",
          "type": "string",
          "enum": [
            "Sender",
            "Campaign"
          ]
        },
        "dailyLimitIncrease": {
          "description": "Enable automatic progressive increase of the daily sending limit to gradually scale up capacity.",
          "type": "boolean"
        },
        "dailyLimitIncreaseToMax": {
          "description": "Target maximum daily sending limit when progressive increase is enabled; must be between 0 and 10,000.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimitIncreasePercent": {
          "description": "Daily percentage increase applied to the sending limit when progressive increase is enabled; must be between 0 and\r\n10,000.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimitOnDate": {
          "description": "Current calculated daily limit after applying progressive increases.",
          "type": "string",
          "format": "date-time"
        },
        "dailyLimitPrioritize": {
          "description": "Email prioritization strategy when approaching daily limit: 'initial' prioritizes first emails, 'followup' prioritizes\r\nfollow-up emails.",
          "type": "string",
          "enum": [
            "Initial",
            "Followup"
          ]
        },
        "dailyLimitInitial": {
          "description": "Separate daily sending limit specifically for initial campaign emails; must be between 1 and 10,000.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimitInitialEnabled": {
          "description": "Enable separate daily limit for initial campaign emails distinct from overall campaign limit.",
          "type": "boolean"
        },
        "dailyLimitWhichEmailsCount": {
          "description": "Which email types count toward daily limit: 'all' counts everything, 'initial' counts only first emails, 'followup'\r\ncounts only followups.",
          "type": "string",
          "enum": [
            "All",
            "Initial"
          ]
        },
        "scheduleSending": {
          "description": "Enable scheduled sending to control when campaign emails are sent during the day.",
          "type": "boolean"
        },
        "scheduleTimeZone": {
          "description": "Timezone identifier for scheduling campaign sends (e.g., 'America/New_York', 'Europe/London'); maximum 64 characters.",
          "type": "string"
        },
        "useProspectsTimeZone": {
          "description": "Enable feature to try and use prospects timezone when available",
          "type": "boolean"
        },
        "scheduleSendOnDate": {
          "description": "Specific date to start sending this campaign when scheduled sending is enabled.",
          "type": "string",
          "format": "date-time"
        },
        "scheduleSendOnDateMinutes": {
          "description": "Time of day in minutes after midnight to start sending on the scheduled date; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "scheduleSendOnDateEnabled": {
          "description": "Enable the scheduled send date feature to start campaign on a specific date.",
          "type": "boolean"
        },
        "scheduleSendOnDateHours": {
          "description": "Hour of the day (0-23) to start sending on the scheduled date when enabled.",
          "type": "integer",
          "format": "int32"
        },
        "delayMinMinutes": {
          "description": "DEPRECATED: holds SECONDS despite the name. Raw passthrough of EM_CAMPAIGN.DelayMin, which the scheduler consumes as\r\nseconds; the earlier \"in minutes\" description was wrong. Use delayMinSeconds instead; this field will be removed in v3.\r\nNot to be confused with the sender resource's delayMinMinutes, which genuinely holds minutes.",
          "type": "integer",
          "format": "int32",
          "x-deprecated": true
        },
        "delayMinSeconds": {
          "description": "Minimum delay in seconds between sending consecutive emails to avoid spam filters. This is the true seconds value of\r\nEM_CAMPAIGN.DelayMin; it always equals the deprecated delayMinMinutes, which holds the same seconds under a wrong name.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "espMatchType": {
          "description": "ESP (Email Service Provider) matching strategy type: 0=none, 1=match sender, 2=match domain.",
          "type": "string",
          "enum": [
            "None",
            "MatchSender",
            "MatchDomain"
          ]
        },
        "espMatchEnabled": {
          "description": "Enable ESP matching to send emails from senders that match prospect's email provider for better deliverability.",
          "type": "boolean"
        },
        "espLimitEnabled": {
          "description": "Enable ESP limiting to restrict campaign sends to specific email service providers.",
          "type": "boolean"
        },
        "espLimitToMicrosoft": {
          "description": "Include Microsoft email providers (Outlook, Hotmail, Live, etc.) when ESP limiting is enabled.",
          "type": "boolean"
        },
        "espLimitToGoogle": {
          "description": "Include Google email providers (Gmail, G Suite) when ESP limiting is enabled.",
          "type": "boolean"
        },
        "espLimitToOther": {
          "description": "Include other email providers beyond Microsoft and Google when ESP limiting is enabled.",
          "type": "boolean"
        },
        "sendMonAfter": {
          "description": "Start time in minutes after midnight for sending emails on Monday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendMonBefore": {
          "description": "End time in minutes after midnight for sending emails on Monday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendMon": {
          "description": "Enable sending campaign emails on Monday.",
          "type": "boolean"
        },
        "sendTueAfter": {
          "description": "Start time in minutes after midnight for sending emails on Tuesday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendTueBefore": {
          "description": "End time in minutes after midnight for sending emails on Tuesday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendTue": {
          "description": "Enable sending campaign emails on Tuesday.",
          "type": "boolean"
        },
        "sendWedAfter": {
          "description": "Start time in minutes after midnight for sending emails on Wednesday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendWedBefore": {
          "description": "End time in minutes after midnight for sending emails on Wednesday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendWed": {
          "description": "Enable sending campaign emails on Wednesday.",
          "type": "boolean"
        },
        "sendThuAfter": {
          "description": "Start time in minutes after midnight for sending emails on Thursday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendThuBefore": {
          "description": "End time in minutes after midnight for sending emails on Thursday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendThu": {
          "description": "Enable sending campaign emails on Thursday.",
          "type": "boolean"
        },
        "sendFriAfter": {
          "description": "Start time in minutes after midnight for sending emails on Friday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendFriBefore": {
          "description": "End time in minutes after midnight for sending emails on Friday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendFri": {
          "description": "Enable sending campaign emails on Friday.",
          "type": "boolean"
        },
        "sendSatAfter": {
          "description": "Start time in minutes after midnight for sending emails on Saturday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendSatBefore": {
          "description": "End time in minutes after midnight for sending emails on Saturday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendSat": {
          "description": "Enable sending campaign emails on Saturday.",
          "type": "boolean"
        },
        "sendSunAfter": {
          "description": "Start time in minutes after midnight for sending emails on Sunday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendSunBefore": {
          "description": "End time in minutes after midnight for sending emails on Sunday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendSun": {
          "description": "Enable sending campaign emails on Sunday.",
          "type": "boolean"
        },
        "initialOpenCount": {
          "description": "Number of email opens from initial campaign email only (excluding followups).",
          "type": "integer",
          "format": "int32"
        },
        "initialClickCount": {
          "description": "Number of link clicks from initial campaign email only (excluding followups).",
          "type": "integer",
          "format": "int32"
        },
        "initialReplyCount": {
          "description": "Number of replies from initial campaign email only (excluding followups).",
          "type": "integer",
          "format": "int32"
        },
        "initialBounceCount": {
          "description": "Number of bounces from initial campaign email only (excluding followups).",
          "type": "integer",
          "format": "int32"
        },
        "prospectCount": {
          "description": "Total number of prospects enrolled in this campaign.",
          "type": "integer",
          "format": "int32"
        },
        "activeProspectCount": {
          "description": "Total number of prospects currently active and enrolled in this campaign.",
          "type": "integer",
          "format": "int32"
        },
        "sentCount": {
          "description": "Total number of emails sent across all followups in this campaign.",
          "type": "integer",
          "format": "int32"
        },
        "openCount": {
          "description": "Total number of email opens across all campaign emails.",
          "type": "integer",
          "format": "int32"
        },
        "clickCount": {
          "description": "Total number of link clicks within all campaign emails.",
          "type": "integer",
          "format": "int32"
        },
        "bounceCount": {
          "description": "Number of prospects in this campaign currently marked as bounced, hard and soft, at the last statistics refresh.",
          "type": "integer",
          "format": "int32"
        },
        "softBounceCount": {
          "description": "Number of prospects in this campaign currently classified as soft-bounced (a temporary delivery failure) at the last\r\nstatistics refresh; included in bounceCount. A prospect leaves this count if a later bounce for it is hard.\r\nSoft-bounce classification started on 2026-09-03, so soft bounces before that date are counted in bounceCount only.",
          "type": "integer",
          "format": "int32"
        },
        "replyCount": {
          "description": "Total number of replies received across all campaign emails.",
          "type": "integer",
          "format": "int32"
        },
        "initialInterestedCount": {
          "description": "Number of prospects marked as interested from initial campaign email only (excluding followups).",
          "type": "integer",
          "format": "int32"
        },
        "interestedCount": {
          "description": "Total number of prospects marked as interested across all campaign emails.",
          "type": "integer",
          "format": "int32"
        },
        "conversionCount": {
          "description": "Total number of conversions tracked across all campaign emails.",
          "type": "integer",
          "format": "int32"
        },
        "initialConversionCount": {
          "description": "Number of conversions from initial campaign email only (excluding followups).",
          "type": "integer",
          "format": "int32"
        },
        "tags": {
          "description": "Tags linked to this campaign (from EM_TAG_CAMPAIGN). Omitted or empty when none.",
          "items": {
            "$ref": "#/definitions/Api2TagRef"
          },
          "xml": {
            "name": "Api2TagRef",
            "wrapped": true
          },
          "type": "array"
        }
      },
      "xml": {
        "name": "Api2Campaign"
      },
      "type": "object"
    },
    "CampaignCreate": {
      "description": "CampaignCreate object is used for creating a new campaign resource. Campaign is the top-most concept in cold-email\r\nsending and orchestrates email delivery to prospects with configurable scheduling, daily limits, and sender rotation.\r\nCampaign contains an initial email plus multiple followups and sequences. Supports day-of-week scheduling, ESP matching,\r\nprogressive daily limit increases, and comprehensive statistics tracking.",
      "required": [
        "name"
      ],
      "properties": {
        "folderId": {
          "description": "Folder identifier for organizing and grouping campaigns; must be a positive integer.",
          "type": "integer",
          "format": "int32",
          "maximum": 2147483647,
          "minimum": 1
        },
        "name": {
          "description": "Campaign display name for identification and organization; maximum 256 characters.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        },
        "description": {
          "description": "Optional description explaining the purpose or goal of this campaign; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "fromEmails": {
          "description": "Comma-separated list of sender email addresses to use for sending campaign emails.",
          "type": "string"
        },
        "fromName": {
          "description": "Display name shown in the From field of campaign emails; maximum 128 characters.",
          "type": "string",
          "maxLength": 128,
          "minLength": 0
        },
        "replyToEmail": {
          "description": "Reply-to email address for prospect responses; must be valid email format with maximum 128 characters.",
          "type": "string",
          "maxLength": 128,
          "minLength": 0
        },
        "subject": {
          "description": "Email subject line for the initial campaign email; maximum 4,000 characters.",
          "type": "string",
          "maxLength": 4000,
          "minLength": 0
        },
        "body": {
          "description": "HTML email body content for the initial campaign message.",
          "type": "string"
        },
        "textOnlyEmails": {
          "description": "Send emails in plain text format only without HTML formatting.",
          "type": "boolean"
        },
        "ccEmails": {
          "description": "Comma-separated list of email addresses to include as CC (carbon copy) recipients on all campaign emails.",
          "type": "string"
        },
        "bccEmails": {
          "description": "Comma-separated list of email addresses to include as BCC (blind carbon copy) recipients on all campaign emails.",
          "type": "string"
        },
        "replyBccEmails": {
          "description": "Comma-separated list of email addresses to BCC on prospect reply emails for internal tracking.",
          "type": "string"
        },
        "replyCcEmails": {
          "description": "Comma-separated list of email addresses to CC on prospect reply emails for internal tracking.",
          "type": "string"
        },
        "sendUnsubscribeListHeader": {
          "description": "Include List-Unsubscribe email header for compliance with email client unsubscribe features.",
          "type": "boolean"
        },
        "deactivateIfMissingPlaceholder": {
          "description": "Automatically deactivate prospect from campaign if required email placeholder/merge tag is missing from their data.",
          "type": "boolean"
        },
        "stopCoworkersOnReply": {
          "description": "Stop sending campaign emails to other team members (coworkers) targeting the same prospect when one receives a reply.",
          "type": "boolean"
        },
        "trackOpens": {
          "description": "Enable tracking of email opens using pixel tracking.",
          "type": "boolean",
          "default": false
        },
        "trackClicks": {
          "description": "Enable tracking of link clicks by replacing URLs with tracking redirects.",
          "type": "boolean",
          "default": false
        },
        "prospectValue": {
          "description": "Estimated monetary value per prospect conversion for ROI tracking; must be a positive integer.",
          "type": "integer",
          "format": "int32",
          "maximum": 2147483647,
          "minimum": 0
        },
        "dailyLimit": {
          "description": "Maximum number of emails this campaign can send per day; must be between 1 and 10,000.",
          "type": "integer",
          "format": "int32",
          "default": 50,
          "maximum": 10000,
          "minimum": 1
        },
        "dailyLimitPer": {
          "description": "Scope for applying the daily limit: 'sender' applies limit per sender account, 'campaign' applies limit across entire\r\ncampaign.",
          "type": "string",
          "default": "Campaign",
          "enum": [
            "Sender",
            "Campaign"
          ]
        },
        "dailyLimitIncrease": {
          "description": "Enable automatic progressive increase of the daily sending limit to gradually scale up capacity.",
          "type": "boolean"
        },
        "dailyLimitIncreaseToMax": {
          "description": "Target maximum daily sending limit when progressive increase is enabled; must be between 0 and 10,000.",
          "type": "integer",
          "format": "int32",
          "maximum": 10000,
          "minimum": 0
        },
        "dailyLimitIncreasePercent": {
          "description": "Daily percentage increase applied to the sending limit when progressive increase is enabled; must be between 0 and\r\n10,000.",
          "type": "integer",
          "format": "int32",
          "maximum": 10000,
          "minimum": 0
        },
        "dailyLimitOnDate": {
          "description": "Current calculated daily limit after applying progressive increases.",
          "type": "string",
          "format": "date-time"
        },
        "dailyLimitPrioritize": {
          "description": "Email prioritization strategy when approaching daily limit: 'initial' prioritizes first emails, 'followup' prioritizes\r\nfollow-up emails.",
          "type": "string",
          "default": "Followup",
          "enum": [
            "Initial",
            "Followup"
          ]
        },
        "dailyLimitInitial": {
          "description": "Separate daily sending limit specifically for initial campaign emails; must be between 1 and 10,000.",
          "type": "integer",
          "format": "int32",
          "maximum": 10000,
          "minimum": 1
        },
        "dailyLimitInitialEnabled": {
          "description": "Enable separate daily limit for initial campaign emails distinct from overall campaign limit.",
          "type": "boolean"
        },
        "dailyLimitWhichEmailsCount": {
          "description": "Which email types count toward daily limit: 'all' counts everything, 'initial' counts only first emails, 'followup'\r\ncounts only followups.",
          "type": "string",
          "default": "All",
          "enum": [
            "All",
            "Initial"
          ]
        },
        "scheduleSending": {
          "description": "Enable scheduled sending to control when campaign emails are sent during the day.",
          "type": "boolean"
        },
        "scheduleTimeZone": {
          "description": "Timezone identifier for scheduling campaign sends (e.g., 'America/New_York', 'Europe/London'); maximum 64 characters.",
          "type": "string",
          "default": "UTC",
          "maxLength": 64,
          "minLength": 0
        },
        "useProspectsTimeZone": {
          "description": "Enable feature to try and use prospects timezone when available",
          "type": "boolean",
          "default": false
        },
        "scheduleSendOnDate": {
          "description": "Specific date to start sending this campaign when scheduled sending is enabled.",
          "type": "string",
          "format": "date-time"
        },
        "scheduleSendOnDateMinutes": {
          "description": "Time of day in minutes after midnight to start sending on the scheduled date; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32",
          "default": 10,
          "maximum": 1439,
          "minimum": 0
        },
        "scheduleSendOnDateEnabled": {
          "description": "Enable the scheduled send date feature to start campaign on a specific date.",
          "type": "boolean"
        },
        "scheduleSendOnDateHours": {
          "description": "Hour of the day (0-23) to start sending on the scheduled date when enabled.",
          "type": "integer",
          "format": "int32",
          "default": 10,
          "maximum": 23,
          "minimum": 0
        },
        "delayMinMinutes": {
          "description": "DEPRECATED: holds SECONDS despite the name. Writes EM_CAMPAIGN.DelayMin raw, which the scheduler consumes as seconds;\r\nthe earlier \"in minutes\" description was wrong. Use delayMinSeconds instead, which takes precedence when both are sent;\r\nthis field will be removed in v3. Not to be confused with the sender resource's delayMinMinutes, which genuinely holds\r\nminutes.",
          "type": "integer",
          "format": "int32",
          "default": 30,
          "maximum": 290,
          "minimum": 1,
          "x-deprecated": true
        },
        "delayMinSeconds": {
          "description": "Minimum delay in seconds between sending consecutive emails to avoid spam filters. Writes the same EM_CAMPAIGN.DelayMin\r\ncolumn as the deprecated delayMinMinutes and takes precedence over it when both are sent. When neither is sent the\r\ndefault is 30 seconds.",
          "type": "integer",
          "format": "int32",
          "maximum": 290,
          "minimum": 1
        },
        "espMatchType": {
          "description": "ESP (Email Service Provider) matching strategy type: 0=none, 1=match sender, 2=match domain.",
          "type": "string",
          "enum": [
            "None",
            "MatchSender",
            "MatchDomain"
          ]
        },
        "espMatchEnabled": {
          "description": "Enable ESP matching to send emails from senders that match prospect's email provider for better deliverability.",
          "type": "boolean"
        },
        "espLimitEnabled": {
          "description": "Enable ESP limiting to restrict campaign sends to specific email service providers.",
          "type": "boolean"
        },
        "espLimitToMicrosoft": {
          "description": "Include Microsoft email providers (Outlook, Hotmail, Live, etc.) when ESP limiting is enabled.",
          "type": "boolean"
        },
        "espLimitToGoogle": {
          "description": "Include Google email providers (Gmail, G Suite) when ESP limiting is enabled.",
          "type": "boolean"
        },
        "espLimitToOther": {
          "description": "Include other email providers beyond Microsoft and Google when ESP limiting is enabled.",
          "type": "boolean"
        },
        "sendMonAfter": {
          "description": "Start time in minutes after midnight for sending emails on Monday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32",
          "maximum": 1439,
          "minimum": 0
        },
        "sendMonBefore": {
          "description": "End time in minutes after midnight for sending emails on Monday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32",
          "maximum": 1439,
          "minimum": 0
        },
        "sendMon": {
          "description": "Enable sending campaign emails on Monday.",
          "type": "boolean",
          "default": true
        },
        "sendTueAfter": {
          "description": "Start time in minutes after midnight for sending emails on Tuesday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32",
          "maximum": 1439,
          "minimum": 0
        },
        "sendTueBefore": {
          "description": "End time in minutes after midnight for sending emails on Tuesday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32",
          "maximum": 1439,
          "minimum": 0
        },
        "sendTue": {
          "description": "Enable sending campaign emails on Tuesday.",
          "type": "boolean",
          "default": true
        },
        "sendWedAfter": {
          "description": "Start time in minutes after midnight for sending emails on Wednesday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32",
          "maximum": 1439,
          "minimum": 0
        },
        "sendWedBefore": {
          "description": "End time in minutes after midnight for sending emails on Wednesday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32",
          "maximum": 1439,
          "minimum": 0
        },
        "sendWed": {
          "description": "Enable sending campaign emails on Wednesday.",
          "type": "boolean",
          "default": true
        },
        "sendThuAfter": {
          "description": "Start time in minutes after midnight for sending emails on Thursday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32",
          "maximum": 1439,
          "minimum": 0
        },
        "sendThuBefore": {
          "description": "End time in minutes after midnight for sending emails on Thursday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32",
          "maximum": 1439,
          "minimum": 0
        },
        "sendThu": {
          "description": "Enable sending campaign emails on Thursday.",
          "type": "boolean",
          "default": true
        },
        "sendFriAfter": {
          "description": "Start time in minutes after midnight for sending emails on Friday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32",
          "maximum": 1439,
          "minimum": 0
        },
        "sendFriBefore": {
          "description": "End time in minutes after midnight for sending emails on Friday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32",
          "maximum": 1439,
          "minimum": 0
        },
        "sendFri": {
          "description": "Enable sending campaign emails on Friday.",
          "type": "boolean",
          "default": true
        },
        "sendSatAfter": {
          "description": "Start time in minutes after midnight for sending emails on Saturday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32",
          "maximum": 1439,
          "minimum": 0
        },
        "sendSatBefore": {
          "description": "End time in minutes after midnight for sending emails on Saturday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32",
          "maximum": 1439,
          "minimum": 0
        },
        "sendSat": {
          "description": "Enable sending campaign emails on Saturday.",
          "type": "boolean",
          "default": true
        },
        "sendSunAfter": {
          "description": "Start time in minutes after midnight for sending emails on Sunday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32",
          "maximum": 1439,
          "minimum": 0
        },
        "sendSunBefore": {
          "description": "End time in minutes after midnight for sending emails on Sunday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32",
          "maximum": 1439,
          "minimum": 0
        },
        "sendSun": {
          "description": "Enable sending campaign emails on Sunday.",
          "type": "boolean",
          "default": true
        }
      },
      "xml": {
        "name": "Api2CampaignCreate"
      },
      "type": "object"
    },
    "CampaignPage": {
      "description": "CampaignPage object represents a paginated list of campaign resources with cursor-based pagination. Campaign is the\r\ntop-most concept in cold-email sending and orchestrates email delivery to prospects with configurable scheduling, daily\r\nlimits, and sender rotation. Campaign contains an initial email plus multiple followups and sequences. Supports\r\nday-of-week scheduling, ESP matching, progressive daily limit increases, and comprehensive statistics tracking.",
      "properties": {
        "items": {
          "description": "Array of items in the current page",
          "items": {
            "$ref": "#/definitions/Campaign"
          },
          "xml": {
            "name": "Api2Campaign",
            "wrapped": true
          },
          "type": "array"
        },
        "pagination": {
          "$ref": "#/definitions/PaginationInteger",
          "description": "Pagination metadata with typed primary key support"
        }
      },
      "xml": {
        "name": "Api2CampaignPage"
      },
      "type": "object"
    },
    "CampaignStats": {
      "description": "Campaign statistics with time-series data for various metrics",
      "properties": {
        "campaignId": {
          "description": "Unique identifier of the campaign",
          "type": "integer",
          "format": "int32"
        },
        "timeline": {
          "description": "Common timeline for all series data points (x-axis values)",
          "items": {
            "type": "string",
            "format": "date-time"
          },
          "type": "array"
        },
        "sentSeries": {
          "$ref": "#/definitions/CampaignStatsSeries",
          "description": "Total messages sent per time period"
        },
        "sentInitialSeries": {
          "$ref": "#/definitions/CampaignStatsSeries",
          "description": "Initial messages sent (excluding followups) per time period"
        },
        "opensSeries": {
          "$ref": "#/definitions/CampaignStatsSeries",
          "description": "Email opens per time period"
        },
        "clicksSeries": {
          "$ref": "#/definitions/CampaignStatsSeries",
          "description": "Link clicks per time period"
        },
        "replySeries": {
          "$ref": "#/definitions/CampaignStatsSeries",
          "description": "Replies received per time period"
        },
        "unspamSeries": {
          "$ref": "#/definitions/CampaignStatsSeries",
          "description": "Unspam/unsubscribe actions per time period"
        },
        "followupStats": {
          "description": "Breakdown of statistics by individual followup emails",
          "items": {
            "$ref": "#/definitions/CampaignStatsFollowup"
          },
          "xml": {
            "name": "Api2CampaignStatsFollowup",
            "wrapped": true
          },
          "type": "array"
        }
      },
      "xml": {
        "name": "Api2CampaignStats"
      },
      "type": "object"
    },
    "CampaignStatsFollowup": {
      "description": "Statistics for individual followup emails within a campaign",
      "properties": {
        "followupId": {
          "description": "Unique identifier of the followup email",
          "type": "integer",
          "format": "int64"
        },
        "subject": {
          "description": "Email subject line",
          "example": "Re: Our previous conversation",
          "type": "string"
        },
        "displayName": {
          "description": "Display name for the followup",
          "example": "First Reminder",
          "type": "string"
        },
        "sentSeries": {
          "$ref": "#/definitions/CampaignStatsSeries",
          "description": "Messages sent for this specific followup per time period"
        }
      },
      "xml": {
        "name": "Api2CampaignStatsFollowup"
      },
      "type": "object"
    },
    "CampaignStatsSeries": {
      "description": "Time-series data for count-based metrics",
      "properties": {
        "count": {
          "description": "Count values aligned with the parent Timeline array",
          "items": {
            "type": "integer",
            "format": "int32"
          },
          "example": "[125, 230, 189, null, 245]",
          "type": "array"
        },
        "openCount": {
          "description": "Reference open count for specific metric aligned with the parent Timeline array",
          "items": {
            "type": "integer",
            "format": "int32"
          },
          "example": "[10, 15, 12, null, 18]",
          "type": "array"
        }
      },
      "xml": {
        "name": "Api2CampaignStatsSeries"
      },
      "type": "object"
    },
    "CampaignStatus": {
      "properties": {
        "campaignId": {
          "type": "integer",
          "format": "int32"
        },
        "status": {
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2CampaignStatus"
      },
      "type": "object"
    },
    "CampaignTagCreate": {
      "description": "Request model for adding a tag to a campaign",
      "required": [
        "tagId"
      ],
      "properties": {
        "tagId": {
          "description": "Tag ID to add to the campaign",
          "example": "5",
          "type": "integer",
          "format": "int32",
          "maximum": 2147483647,
          "minimum": 1
        }
      },
      "xml": {
        "name": "Api2CampaignTagCreate"
      },
      "type": "object"
    },
    "CampaignUpdate": {
      "description": "CampaignUpdate object is used for updating an existing campaign resource. Campaign is the top-most concept in cold-email\r\nsending and orchestrates email delivery to prospects with configurable scheduling, daily limits, and sender rotation.\r\nCampaign contains an initial email plus multiple followups and sequences. Supports day-of-week scheduling, ESP matching,\r\nprogressive daily limit increases, and comprehensive statistics tracking.",
      "properties": {
        "folderId": {
          "description": "Folder identifier for organizing and grouping campaigns; must be a positive integer.",
          "type": "integer",
          "format": "int32"
        },
        "name": {
          "description": "Campaign display name for identification and organization; maximum 256 characters.",
          "type": "string"
        },
        "description": {
          "description": "Optional description explaining the purpose or goal of this campaign; maximum 512 characters.",
          "type": "string"
        },
        "fromEmails": {
          "description": "Comma-separated list of sender email addresses to use for sending campaign emails.",
          "type": "string"
        },
        "fromName": {
          "description": "Display name shown in the From field of campaign emails; maximum 128 characters.",
          "type": "string"
        },
        "replyToEmail": {
          "description": "Reply-to email address for prospect responses; must be valid email format with maximum 128 characters.",
          "type": "string"
        },
        "subject": {
          "description": "Email subject line for the initial campaign email; maximum 4,000 characters.",
          "type": "string"
        },
        "body": {
          "description": "HTML email body content for the initial campaign message.",
          "type": "string"
        },
        "textOnlyEmails": {
          "description": "Send emails in plain text format only without HTML formatting.",
          "type": "boolean"
        },
        "ccEmails": {
          "description": "Comma-separated list of email addresses to include as CC (carbon copy) recipients on all campaign emails.",
          "type": "string"
        },
        "bccEmails": {
          "description": "Comma-separated list of email addresses to include as BCC (blind carbon copy) recipients on all campaign emails.",
          "type": "string"
        },
        "replyBccEmails": {
          "description": "Comma-separated list of email addresses to BCC on prospect reply emails for internal tracking.",
          "type": "string"
        },
        "replyCcEmails": {
          "description": "Comma-separated list of email addresses to CC on prospect reply emails for internal tracking.",
          "type": "string"
        },
        "sendUnsubscribeListHeader": {
          "description": "Include List-Unsubscribe email header for compliance with email client unsubscribe features.",
          "type": "boolean"
        },
        "deactivateIfMissingPlaceholder": {
          "description": "Automatically deactivate prospect from campaign if required email placeholder/merge tag is missing from their data.",
          "type": "boolean"
        },
        "stopCoworkersOnReply": {
          "description": "Stop sending campaign emails to other team members (coworkers) targeting the same prospect when one receives a reply.",
          "type": "boolean"
        },
        "trackOpens": {
          "description": "Enable tracking of email opens using pixel tracking.",
          "type": "boolean"
        },
        "trackClicks": {
          "description": "Enable tracking of link clicks by replacing URLs with tracking redirects.",
          "type": "boolean"
        },
        "prospectValue": {
          "description": "Estimated monetary value per prospect conversion for ROI tracking; must be a positive integer.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimit": {
          "description": "Maximum number of emails this campaign can send per day; must be between 1 and 10,000.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimitPer": {
          "description": "Scope for applying the daily limit: 'sender' applies limit per sender account, 'campaign' applies limit across entire\r\ncampaign.",
          "type": "string",
          "enum": [
            "Sender",
            "Campaign"
          ]
        },
        "dailyLimitIncrease": {
          "description": "Enable automatic progressive increase of the daily sending limit to gradually scale up capacity.",
          "type": "boolean"
        },
        "dailyLimitIncreaseToMax": {
          "description": "Target maximum daily sending limit when progressive increase is enabled; must be between 0 and 10,000.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimitIncreasePercent": {
          "description": "Daily percentage increase applied to the sending limit when progressive increase is enabled; must be between 0 and\r\n10,000.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimitOnDate": {
          "description": "Current calculated daily limit after applying progressive increases.",
          "type": "string",
          "format": "date-time"
        },
        "dailyLimitPrioritize": {
          "description": "Email prioritization strategy when approaching daily limit: 'initial' prioritizes first emails, 'followup' prioritizes\r\nfollow-up emails.",
          "type": "string",
          "enum": [
            "Initial",
            "Followup"
          ]
        },
        "dailyLimitInitial": {
          "description": "Separate daily sending limit specifically for initial campaign emails; must be between 1 and 10,000.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimitInitialEnabled": {
          "description": "Enable separate daily limit for initial campaign emails distinct from overall campaign limit.",
          "type": "boolean"
        },
        "dailyLimitWhichEmailsCount": {
          "description": "Which email types count toward daily limit: 'all' counts everything, 'initial' counts only first emails, 'followup'\r\ncounts only followups.",
          "type": "string",
          "enum": [
            "All",
            "Initial"
          ]
        },
        "scheduleSending": {
          "description": "Enable scheduled sending to control when campaign emails are sent during the day.",
          "type": "boolean"
        },
        "scheduleTimeZone": {
          "description": "Timezone identifier for scheduling campaign sends (e.g., 'America/New_York', 'Europe/London'); maximum 64 characters.",
          "type": "string"
        },
        "useProspectsTimeZone": {
          "description": "Enable feature to try and use prospects timezone when available",
          "type": "boolean"
        },
        "scheduleSendOnDate": {
          "description": "Specific date to start sending this campaign when scheduled sending is enabled.",
          "type": "string",
          "format": "date-time"
        },
        "scheduleSendOnDateMinutes": {
          "description": "Time of day in minutes after midnight to start sending on the scheduled date; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "scheduleSendOnDateEnabled": {
          "description": "Enable the scheduled send date feature to start campaign on a specific date.",
          "type": "boolean"
        },
        "scheduleSendOnDateHours": {
          "description": "Hour of the day (0-23) to start sending on the scheduled date when enabled.",
          "type": "integer",
          "format": "int32"
        },
        "delayMinMinutes": {
          "description": "DEPRECATED: holds SECONDS despite the name. Writes EM_CAMPAIGN.DelayMin raw, which the scheduler consumes as seconds;\r\nthe earlier \"in minutes\" description was wrong. Use delayMinSeconds instead, which takes precedence when both are sent;\r\nthis field will be removed in v3. Not to be confused with the sender resource's delayMinMinutes, which genuinely holds\r\nminutes.",
          "type": "integer",
          "format": "int32",
          "x-deprecated": true
        },
        "delayMinSeconds": {
          "description": "Minimum delay in seconds between sending consecutive emails to avoid spam filters. Writes the same EM_CAMPAIGN.DelayMin\r\ncolumn as the deprecated delayMinMinutes and takes precedence over it when both are sent.",
          "type": "integer",
          "format": "int32"
        },
        "espMatchType": {
          "description": "ESP (Email Service Provider) matching strategy type: 0=none, 1=match sender, 2=match domain.",
          "type": "string",
          "enum": [
            "None",
            "MatchSender",
            "MatchDomain"
          ]
        },
        "espMatchEnabled": {
          "description": "Enable ESP matching to send emails from senders that match prospect's email provider for better deliverability.",
          "type": "boolean"
        },
        "espLimitEnabled": {
          "description": "Enable ESP limiting to restrict campaign sends to specific email service providers.",
          "type": "boolean"
        },
        "espLimitToMicrosoft": {
          "description": "Include Microsoft email providers (Outlook, Hotmail, Live, etc.) when ESP limiting is enabled.",
          "type": "boolean"
        },
        "espLimitToGoogle": {
          "description": "Include Google email providers (Gmail, G Suite) when ESP limiting is enabled.",
          "type": "boolean"
        },
        "espLimitToOther": {
          "description": "Include other email providers beyond Microsoft and Google when ESP limiting is enabled.",
          "type": "boolean"
        },
        "sendMonAfter": {
          "description": "Start time in minutes after midnight for sending emails on Monday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendMonBefore": {
          "description": "End time in minutes after midnight for sending emails on Monday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendMon": {
          "description": "Enable sending campaign emails on Monday.",
          "type": "boolean"
        },
        "sendTueAfter": {
          "description": "Start time in minutes after midnight for sending emails on Tuesday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendTueBefore": {
          "description": "End time in minutes after midnight for sending emails on Tuesday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendTue": {
          "description": "Enable sending campaign emails on Tuesday.",
          "type": "boolean"
        },
        "sendWedAfter": {
          "description": "Start time in minutes after midnight for sending emails on Wednesday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendWedBefore": {
          "description": "End time in minutes after midnight for sending emails on Wednesday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendWed": {
          "description": "Enable sending campaign emails on Wednesday.",
          "type": "boolean"
        },
        "sendThuAfter": {
          "description": "Start time in minutes after midnight for sending emails on Thursday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendThuBefore": {
          "description": "End time in minutes after midnight for sending emails on Thursday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendThu": {
          "description": "Enable sending campaign emails on Thursday.",
          "type": "boolean"
        },
        "sendFriAfter": {
          "description": "Start time in minutes after midnight for sending emails on Friday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendFriBefore": {
          "description": "End time in minutes after midnight for sending emails on Friday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendFri": {
          "description": "Enable sending campaign emails on Friday.",
          "type": "boolean"
        },
        "sendSatAfter": {
          "description": "Start time in minutes after midnight for sending emails on Saturday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendSatBefore": {
          "description": "End time in minutes after midnight for sending emails on Saturday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendSat": {
          "description": "Enable sending campaign emails on Saturday.",
          "type": "boolean"
        },
        "sendSunAfter": {
          "description": "Start time in minutes after midnight for sending emails on Sunday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendSunBefore": {
          "description": "End time in minutes after midnight for sending emails on Sunday; must be between 0 and 1,439 (11:59 PM).",
          "type": "integer",
          "format": "int32"
        },
        "sendSun": {
          "description": "Enable sending campaign emails on Sunday.",
          "type": "boolean"
        }
      },
      "xml": {
        "name": "Api2CampaignUpdate"
      },
      "type": "object"
    },
    "ClickDetail": {
      "properties": {
        "url": {
          "type": "string"
        }
      },
      "xml": {
        "name": "ClickDetailDto"
      },
      "type": "object"
    },
    "Clientspace": {
      "description": "Clientspace object represents a result/response for clientspace resource. Clientspace is a whitelabel sub-organization\r\nallowing agencies to provide fully branded platforms to clients. Clientspace functions as a workspace with additional\r\nwhitelabel capabilities, featuring its own users, campaigns, prospects, and API key with complete data isolation.",
      "properties": {
        "clientspaceId": {
          "description": "Unique identifier for the clientspace (whitelabel sub-organization) within the agency.",
          "type": "integer",
          "format": "int32"
        },
        "createdAt": {
          "description": "Timestamp when the clientspace was created in the system.",
          "type": "string",
          "format": "date-time"
        },
        "title": {
          "description": "Display name of the clientspace; maximum 256 characters.",
          "type": "string"
        },
        "apiKey": {
          "description": "API key for authenticating requests made on behalf of this clientspace, represented as a GUID.",
          "example": "00000000-0000-0000-0000-000000000000",
          "type": "string",
          "format": "uuid"
        },
        "separateCredits": {
          "description": "Indicates whether the clientspace has a separate credit pool independent from the parent agency, allowing dedicated\r\ncredit allocation for this client.",
          "type": "boolean"
        },
        "autoAllocate": {
          "description": "Enables automatic recurring credit allocation to the clientspace, useful for subscription-based credit provisioning.",
          "type": "boolean"
        },
        "creditAmount": {
          "description": "The number of credits to allocate when auto-allocation is enabled, defining the recurring credit amount for this\r\nclientspace.",
          "type": "integer",
          "format": "int32"
        }
      },
      "xml": {
        "name": "Api2Clientspace"
      },
      "type": "object"
    },
    "ClientspaceCreate": {
      "description": "ClientspaceCreate object is used for creating a new clientspace resource. Clientspace is a whitelabel sub-organization\r\nallowing agencies to provide fully branded platforms to clients. Clientspace functions as a workspace with additional\r\nwhitelabel capabilities, featuring its own users, campaigns, prospects, and API key with complete data isolation.",
      "required": [
        "title"
      ],
      "properties": {
        "title": {
          "description": "Display name of the clientspace; maximum 256 characters.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        },
        "separateCredits": {
          "description": "Indicates whether the clientspace has a separate credit pool independent from the parent agency, allowing dedicated\r\ncredit allocation for this client.",
          "type": "boolean"
        },
        "autoAllocate": {
          "description": "Enables automatic recurring credit allocation to the clientspace, useful for subscription-based credit provisioning.",
          "type": "boolean"
        },
        "creditAmount": {
          "description": "The number of credits to allocate when auto-allocation is enabled, defining the recurring credit amount for this\r\nclientspace.",
          "type": "integer",
          "format": "int32"
        }
      },
      "xml": {
        "name": "Api2ClientspaceCreate"
      },
      "type": "object"
    },
    "ClientspaceCreditAllocation": {
      "description": "ClientspaceCreditAllocation object represents one sending credit allocation from the parent agency to a clientspace.\r\nAllocation fields are those recorded when the allocation was created; balance fields are always current.",
      "properties": {
        "allocationId": {
          "description": "Unique identifier of the credit allocation.",
          "type": "integer",
          "format": "int32"
        },
        "clientspaceId": {
          "description": "Identifier of the clientspace the credits were allocated to.",
          "type": "integer",
          "format": "int32"
        },
        "amount": {
          "description": "Number of sending credits moved from the agency to the clientspace.",
          "type": "integer",
          "format": "int32"
        },
        "note": {
          "description": "Free-text note recorded with the allocation; when the request omitted it, the default 'Added from main account'\r\nis recorded and returned.",
          "type": "string"
        },
        "externalReference": {
          "description": "Idempotency key the allocation was created with, or null when none was provided.",
          "type": "string"
        },
        "status": {
          "description": "Allocation state: 'pending' while the credit move is in flight, 'completed' when both ledger legs succeeded,\r\n'failed' when the move could not be completed.",
          "type": "string"
        },
        "balance": {
          "description": "Current sending credit balance of the clientspace, read after the allocation.",
          "type": "integer",
          "format": "int32"
        },
        "agencyBalance": {
          "description": "Current sending credit balance of the parent agency, read after the allocation.",
          "type": "integer",
          "format": "int32"
        },
        "createdAt": {
          "description": "Timestamp when the allocation was created.",
          "type": "string",
          "format": "date-time"
        }
      },
      "xml": {
        "name": "Api2ClientspaceCreditAllocation"
      },
      "type": "object"
    },
    "ClientspaceCreditAllocationCreate": {
      "description": "ClientspaceCreditAllocationCreate object is used for allocating sending credits from the parent agency to a clientspace\r\nwith separate credits. The amount is debited from the agency balance and credited to the clientspace balance.",
      "required": [
        "amount"
      ],
      "properties": {
        "amount": {
          "description": "Number of sending credits to move from the agency to the clientspace; must be a positive integer.",
          "example": "5000",
          "type": "integer",
          "format": "int32",
          "maximum": 2147483647,
          "minimum": 1
        },
        "note": {
          "description": "Optional free-text note for the allocation; recorded in the credit ledger; maximum 256 characters.",
          "example": "Top-up from order #4821",
          "type": "string",
          "maxLength": 256
        },
        "externalReference": {
          "description": "Optional idempotency key, unique per agency; maximum 128 characters. Repeating a request with the same\r\nexternalReference returns the original allocation instead of moving credits again. Strongly recommended for\r\nautomated integrations that retry on timeout.",
          "example": "order-4821",
          "type": "string",
          "maxLength": 128
        }
      },
      "xml": {
        "name": "Api2ClientspaceCreditAllocationCreate"
      },
      "type": "object"
    },
    "ClientspaceCreditStatus": {
      "description": "ClientspaceCreditStatus object represents the sending credit balance of a clientspace, with an explicit discriminator\r\nfor whether the clientspace holds its own credits or shares the parent agency's pool.",
      "properties": {
        "clientspaceId": {
          "description": "Identifier of the clientspace the balance belongs to.",
          "type": "integer",
          "format": "int32"
        },
        "creditMode": {
          "description": "Credit mode of the clientspace: 'separate' when it holds its own balance, 'shared' when it draws from the parent\r\nagency's pool (optionally capped by a monthly allocation).",
          "type": "string"
        },
        "balance": {
          "description": "Effective available sending credits. For 'separate' mode this is the clientspace's own balance; for 'shared' mode\r\nit is the remaining monthly allocation when auto-allocation is enabled, otherwise the parent agency's balance.",
          "type": "integer",
          "format": "int32"
        },
        "agencyBalance": {
          "description": "Current sending credit balance of the parent agency. Populated only for agency callers; null when a\r\nclientspace reads its own status.",
          "type": "integer",
          "format": "int32"
        }
      },
      "xml": {
        "name": "Api2ClientspaceCreditStatus"
      },
      "type": "object"
    },
    "ClientspacePage": {
      "description": "ClientspacePage object represents a paginated list of clientspace resources with cursor-based pagination. Clientspace is\r\na whitelabel sub-organization allowing agencies to provide fully branded platforms to clients. Clientspace functions as\r\na workspace with additional whitelabel capabilities, featuring its own users, campaigns, prospects, and API key with\r\ncomplete data isolation.",
      "properties": {
        "items": {
          "description": "Array of items in the current page",
          "items": {
            "$ref": "#/definitions/Clientspace"
          },
          "xml": {
            "name": "Api2Clientspace",
            "wrapped": true
          },
          "type": "array"
        },
        "pagination": {
          "$ref": "#/definitions/PaginationInteger",
          "description": "Pagination metadata with typed primary key support"
        }
      },
      "xml": {
        "name": "Api2ClientspacePage"
      },
      "type": "object"
    },
    "ClientspaceUpdate": {
      "description": "ClientspaceUpdate object is used for updating an existing clientspace resource. Clientspace is a whitelabel sub-organization\r\nallowing agencies to provide fully branded platforms to clients. Clientspace functions as a workspace with additional\r\nwhitelabel capabilities, featuring its own users, campaigns, prospects, and API key with complete data isolation.",
      "properties": {
        "title": {
          "description": "Display name of the clientspace; maximum 256 characters.",
          "type": "string"
        },
        "separateCredits": {
          "description": "Indicates whether the clientspace has a separate credit pool independent from the parent agency, allowing dedicated\r\ncredit allocation for this client.",
          "type": "boolean"
        },
        "autoAllocate": {
          "description": "Enables automatic recurring credit allocation to the clientspace, useful for subscription-based credit provisioning.",
          "type": "boolean"
        },
        "creditAmount": {
          "description": "The number of credits to allocate when auto-allocation is enabled, defining the recurring credit amount for this\r\nclientspace.",
          "type": "integer",
          "format": "int32"
        }
      },
      "xml": {
        "name": "Api2ClientspaceUpdate"
      },
      "type": "object"
    },
    "DataTokenService": {
      "description": "Data Token pricing metadata for a consumable service.",
      "properties": {
        "service": {
          "description": "Machine-readable service key.",
          "type": "string"
        },
        "label": {
          "description": "Human-readable service label.",
          "type": "string"
        },
        "tokensPerUnit": {
          "description": "Number of Data Tokens charged per unit.",
          "type": "integer",
          "format": "int64"
        },
        "unit": {
          "description": "Unit that the token price applies to.",
          "type": "string"
        },
        "status": {
          "description": "Optional lifecycle status, for example planned.",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2DataTokenService"
      },
      "type": "object"
    },
    "DataTokenStatus": {
      "description": "Shared Data Token balance and usage metadata for validation, lead search, and other consumable services.",
      "properties": {
        "balance": {
          "description": "Current spendable Data Token balance for the billing account.",
          "type": "integer",
          "format": "int64"
        },
        "monthlyLimit": {
          "description": "Monthly Data Token limit for this clientspace, or null when no monthly limit applies.",
          "type": "integer",
          "format": "int32"
        },
        "usedThisMonth": {
          "description": "Data Tokens used by this clientspace in the current UTC month, or null when no monthly limit applies.",
          "type": "integer",
          "format": "int64"
        },
        "remainingThisMonth": {
          "description": "Remaining monthly Data Tokens for this clientspace, or null when no monthly limit applies.",
          "type": "integer",
          "format": "int64"
        },
        "services": {
          "description": "Current and planned services that use Data Tokens.",
          "items": {
            "$ref": "#/definitions/DataTokenService"
          },
          "xml": {
            "name": "Api2DataTokenService",
            "wrapped": true
          },
          "type": "array"
        }
      },
      "xml": {
        "name": "Api2DataTokenStatus"
      },
      "type": "object"
    },
    "Error": {
      "description": "Error object represents a result/response for error resource. Error is an audit record capturing errors across\r\nthe email campaign platform including sending failures, receiving issues, warmup disconnections, and system errors.\r\nError provides observability and troubleshooting capabilities with references to associated campaigns, senders,\r\nprospects, and followups along with detailed error messages and server context for distributed debugging.",
      "properties": {
        "errorId": {
          "description": "Unique identifier for the error record.",
          "type": "integer",
          "format": "int64"
        },
        "createdAt": {
          "description": "Timestamp when the error occurred in UTC.",
          "type": "string",
          "format": "date-time"
        },
        "campaignId": {
          "description": "Campaign associated with this error if the error occurred during campaign operations.",
          "type": "integer",
          "format": "int32"
        },
        "followupId": {
          "description": "Followup email associated with this error if the error occurred during followup sending.",
          "type": "integer",
          "format": "int64"
        },
        "senderId": {
          "description": "Sender account associated with this error if the error occurred during sending or receiving operations.",
          "type": "integer",
          "format": "int64"
        },
        "action": {
          "description": "Error action code or category identifying the type of error (e.g. send_gmail_oauth, receive_imap, warmup_disconnected).",
          "type": "string"
        },
        "context": {
          "description": "Reference value providing additional context such as email address, ID, or other identifiers; maximum 128 characters.",
          "type": "string"
        },
        "message": {
          "description": "Short error message providing a brief description of what went wrong; maximum 512 characters.",
          "type": "string"
        },
        "description": {
          "description": "Detailed error description including stack traces and additional context for debugging; maximum 4000 characters.",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2Error"
      },
      "type": "object"
    },
    "ErrorPage": {
      "description": "ErrorPage object represents a paginated list of error resources with cursor-based pagination. Error is an audit record\r\ncapturing errors across the email campaign platform including sending failures, receiving issues, warmup disconnections,\r\nand system errors. Error provides observability and troubleshooting capabilities with references to associated\r\ncampaigns, senders, prospects, and followups along with detailed error messages and server context for distributed\r\ndebugging.",
      "properties": {
        "items": {
          "description": "Array of items in the current page",
          "items": {
            "$ref": "#/definitions/Error"
          },
          "xml": {
            "name": "Api2Error",
            "wrapped": true
          },
          "type": "array"
        },
        "pagination": {
          "$ref": "#/definitions/PaginationInteger",
          "description": "Pagination metadata with typed primary key support"
        }
      },
      "xml": {
        "name": "Api2ErrorPage"
      },
      "type": "object"
    },
    "Followup": {
      "description": "Followup object represents a result/response for followup resource. Followup is an automated email message sent\r\nafter the initial campaign email based on wait times and conditions. Followup can send as a reply in the same thread and\r\nincludes tracking statistics for opens, clicks, and replies.",
      "properties": {
        "followupId": {
          "description": "Unique identifier for the followup email.",
          "type": "integer",
          "format": "int64"
        },
        "sequenceId": {
          "description": "Sequence identifier that this followup belongs to, if part of a conditional sequence.",
          "type": "integer",
          "format": "int64"
        },
        "subject": {
          "description": "Email subject line for this followup; maximum 1,024 characters.",
          "type": "string"
        },
        "body": {
          "description": "HTML email body content for this followup message.",
          "type": "string"
        },
        "waitMin": {
          "description": "Wait time duration before sending this followup; must be an integer between 1 and 1000",
          "type": "integer",
          "format": "int32"
        },
        "waitUnits": {
          "description": "Time unit for the wait period (e.g., 'minutes', 'hours', 'days').",
          "type": "string",
          "enum": [
            "Minutes",
            "Hours",
            "Days"
          ]
        },
        "useOriginalSubject": {
          "description": "Use the original campaign subject line instead of a custom subject for this followup.",
          "type": "boolean"
        },
        "sendInSameThread": {
          "description": "Send this followup as a reply in the same email thread as the initial campaign email.",
          "type": "boolean"
        },
        "replyInThread": {
          "description": "Reply as a thread to the original email conversation.",
          "type": "boolean"
        },
        "replyInThreadToFollowupId": {
          "description": "Reference to a specific earlier followup ID to reply to within the thread; must be a positive integer.",
          "type": "integer",
          "format": "int64"
        },
        "sentCount": {
          "description": "Total number of times this followup email was sent to prospects.",
          "type": "integer",
          "format": "int32"
        },
        "openCount": {
          "description": "Total number of times this followup email was opened by recipients.",
          "type": "integer",
          "format": "int32"
        },
        "clickCount": {
          "description": "Total number of link clicks within this followup email.",
          "type": "integer",
          "format": "int32"
        },
        "bounceCount": {
          "description": "Total number of bounce responses received for this followup email.",
          "type": "integer",
          "format": "int32"
        },
        "interestedCount": {
          "description": "Total number of prospects marked as interested from this followup email.",
          "type": "integer",
          "format": "int32"
        },
        "replyCount": {
          "description": "Total number of replies received to this followup email.",
          "type": "integer",
          "format": "int32"
        }
      },
      "xml": {
        "name": "Api2Followup"
      },
      "type": "object"
    },
    "FollowupCreate": {
      "description": "FollowupCreate object is used for creating a new followup resource. Followup is an automated email message sent after the\r\ninitial campaign email based on wait times and conditions. Followup can send as a reply in the same thread and includes\r\ntracking statistics for opens, clicks, and replies.",
      "required": [
        "waitMin",
        "waitUnits"
      ],
      "properties": {
        "subject": {
          "description": "Email subject line for this followup; maximum 1,024 characters.",
          "type": "string",
          "maxLength": 1024,
          "minLength": 0
        },
        "body": {
          "description": "HTML email body content for this followup message.",
          "type": "string"
        },
        "waitMin": {
          "description": "Wait time duration before sending this followup; must be an integer between 1 and 1000",
          "type": "integer",
          "format": "int32",
          "maximum": 1000,
          "minimum": 1
        },
        "waitUnits": {
          "description": "Time unit for the wait period (e.g., 'minutes', 'hours', 'days').",
          "type": "string",
          "enum": [
            "Minutes",
            "Hours",
            "Days"
          ]
        },
        "useOriginalSubject": {
          "description": "Use the original campaign subject line instead of a custom subject for this followup.",
          "type": "boolean"
        },
        "sendInSameThread": {
          "description": "Send this followup as a reply in the same email thread as the initial campaign email.",
          "type": "boolean"
        },
        "replyInThread": {
          "description": "Reply as a thread to the original email conversation.",
          "type": "boolean"
        },
        "replyInThreadToFollowupId": {
          "description": "Reference to a specific earlier followup ID to reply to within the thread; must be a positive integer.",
          "type": "integer",
          "format": "int64",
          "maximum": 9.2233720368547758E+18,
          "minimum": 1.0
        }
      },
      "xml": {
        "name": "Api2FollowupCreate"
      },
      "type": "object"
    },
    "FollowupPage": {
      "description": "FollowupPage object represents a paginated list of followup resources with cursor-based pagination. Followup is an\r\nautomated email message sent after the initial campaign email based on wait times and conditions. Followup can send as a\r\nreply in the same thread and includes tracking statistics for opens, clicks, and replies.",
      "properties": {
        "items": {
          "description": "Array of items in the current page",
          "items": {
            "$ref": "#/definitions/Followup"
          },
          "xml": {
            "name": "Api2Followup",
            "wrapped": true
          },
          "type": "array"
        },
        "pagination": {
          "$ref": "#/definitions/PaginationInteger",
          "description": "Pagination metadata with typed primary key support"
        }
      },
      "xml": {
        "name": "Api2FollowupPage"
      },
      "type": "object"
    },
    "FollowupUpdate": {
      "description": "FollowupUpdate object is used for updating an existing followup resource. Followup is an automated email message sent\r\nafter the initial campaign email based on wait times and conditions. Followup can send as a reply in the same thread and\r\nincludes tracking statistics for opens, clicks, and replies.",
      "properties": {
        "subject": {
          "description": "Email subject line for this followup; maximum 1,024 characters.",
          "type": "string"
        },
        "body": {
          "description": "HTML email body content for this followup message.",
          "type": "string"
        },
        "waitMin": {
          "description": "Wait time duration before sending this followup; must be an integer between 1 and 1000",
          "type": "integer",
          "format": "int32"
        },
        "waitUnits": {
          "description": "Time unit for the wait period (e.g., 'minutes', 'hours', 'days').",
          "type": "string",
          "enum": [
            "Minutes",
            "Hours",
            "Days"
          ]
        },
        "useOriginalSubject": {
          "description": "Use the original campaign subject line instead of a custom subject for this followup.",
          "type": "boolean"
        },
        "sendInSameThread": {
          "description": "Send this followup as a reply in the same email thread as the initial campaign email.",
          "type": "boolean"
        },
        "replyInThread": {
          "description": "Reply as a thread to the original email conversation.",
          "type": "boolean"
        },
        "replyInThreadToFollowupId": {
          "description": "Reference to a specific earlier followup ID to reply to within the thread; must be a positive integer.",
          "type": "integer",
          "format": "int64"
        }
      },
      "xml": {
        "name": "Api2FollowupUpdate"
      },
      "type": "object"
    },
    "List": {
      "description": "List object represents a result/response for list resource. List is a collection organizing and grouping\r\nprospects for campaign management. List belongs to a folder and can contain multiple prospects. List can be shared\r\nacross the organization or kept private to users.",
      "properties": {
        "listId": {
          "description": "Unique identifier for the mailing list.",
          "type": "integer",
          "format": "int32"
        },
        "createdAt": {
          "description": "Timestamp when the list was created in the system.",
          "type": "string",
          "format": "date-time"
        },
        "folderId": {
          "description": "Folder identifier for organizing and grouping lists; must be a positive integer.",
          "type": "integer",
          "format": "int32"
        },
        "title": {
          "description": "Display name of the mailing list; maximum 256 characters.",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2List"
      },
      "type": "object"
    },
    "ListCreate": {
      "description": "ListCreate object is used for creating a new list resource. List is a collection organizing and grouping prospects\r\nfor campaign management. List belongs to a folder and can contain multiple prospects. List can be shared across the\r\norganization or kept private to users.",
      "required": [
        "title"
      ],
      "properties": {
        "folderId": {
          "description": "Folder identifier for organizing and grouping lists; must be a positive integer.",
          "type": "integer",
          "format": "int32",
          "maximum": 2147483647,
          "minimum": 1
        },
        "title": {
          "description": "Display name of the mailing list; maximum 256 characters.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        }
      },
      "xml": {
        "name": "Api2ListCreate"
      },
      "type": "object"
    },
    "ListPage": {
      "description": "ListPage object represents a paginated list of list resources with cursor-based pagination. List is a collection\r\norganizing and grouping prospects for campaign management. List belongs to a folder and can contain multiple prospects.\r\nList can be shared across the organization or kept private to users.",
      "properties": {
        "items": {
          "description": "Array of items in the current page",
          "items": {
            "$ref": "#/definitions/List"
          },
          "xml": {
            "name": "Api2List",
            "wrapped": true
          },
          "type": "array"
        },
        "pagination": {
          "$ref": "#/definitions/PaginationInteger",
          "description": "Pagination metadata with typed primary key support"
        }
      },
      "xml": {
        "name": "Api2ListPage"
      },
      "type": "object"
    },
    "ListUpdate": {
      "description": "ListUpdate object is used for updating an existing list resource. List is a collection organizing and grouping\r\nprospects for campaign management. List belongs to a folder and can contain multiple prospects. List can be shared\r\nacross the organization or kept private to users.",
      "properties": {
        "folderId": {
          "description": "Folder identifier for organizing and grouping lists; must be a positive integer.",
          "type": "integer",
          "format": "int32"
        },
        "title": {
          "description": "Display name of the mailing list; maximum 256 characters.",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2ListUpdate"
      },
      "type": "object"
    },
    "Message": {
      "description": "Message object represents a result/response for message resource. Message is a unified representation of email\r\nmessages in the platform, containing both sent messages and replies. Message includes tracking information for opens and\r\nclicks, email content, and relationships to campaigns and followups for comprehensive email thread management.",
      "properties": {
        "messageId": {
          "description": "Unique identifier for the message, using either SentID or ReplyID depending on the message type.",
          "type": "string"
        },
        "createdAt": {
          "description": "Timestamp when the message was created or sent.",
          "type": "string",
          "format": "date-time"
        },
        "type": {
          "description": "Message type indicating whether this is a sent message or a reply. Valid values: SENT or REPLY.",
          "type": "string",
          "enum": [
            "Sent",
            "Reply",
            "SentManual"
          ]
        },
        "campaignId": {
          "description": "ID of the campaign this message is associated with, if applicable.",
          "type": "integer",
          "format": "int64"
        },
        "followupId": {
          "description": "Followup ID (FUID) associated with this message, if applicable.",
          "type": "integer",
          "format": "int64"
        },
        "fromEmail": {
          "description": "Email address of the sender.",
          "type": "string"
        },
        "toEmail": {
          "description": "Email address of the recipient.",
          "type": "string"
        },
        "senderId": {
          "description": "ID of the connected sender mailbox that received the reply. Set on Reply messages; null on Sent messages.",
          "type": "integer",
          "format": "int64"
        },
        "subject": {
          "description": "Email subject line.",
          "type": "string"
        },
        "body": {
          "description": "The body content of the email message. HTML content should be handled or sanitized appropriately on the client side.",
          "type": "string"
        },
        "openCount": {
          "description": "Number of times this message was opened. Only applicable to SENT messages.",
          "type": "integer",
          "format": "int32"
        },
        "clickCount": {
          "description": "Number of times links in this message were clicked. Only applicable to SENT messages.",
          "type": "integer",
          "format": "int32"
        },
        "clickDetails": {
          "description": "Detailed click tracking information for links in the message. Only applicable to SENT messages.",
          "items": {
            "$ref": "#/definitions/ClickDetail"
          },
          "xml": {
            "name": "ClickDetailDto",
            "wrapped": true
          },
          "type": "array"
        }
      },
      "xml": {
        "name": "Api2Message"
      },
      "type": "object"
    },
    "MessagePage": {
      "description": "MessagePage object represents a paginated list of message resources with cursor-based pagination. Message is a unified\r\nrepresentation of email messages in the platform, containing both sent messages and replies. Message includes tracking\r\ninformation for opens and clicks, email content, and relationships to campaigns and followups for comprehensive email\r\nthread management.",
      "properties": {
        "items": {
          "description": "Array of items in the current page",
          "items": {
            "$ref": "#/definitions/Message"
          },
          "xml": {
            "name": "Api2Message",
            "wrapped": true
          },
          "type": "array"
        },
        "pagination": {
          "$ref": "#/definitions/PaginationNullable`1",
          "description": "Pagination metadata with typed primary key support"
        }
      },
      "xml": {
        "name": "Api2MessagePage"
      },
      "type": "object"
    },
    "MessageReply": {
      "description": "Request model for sending an email reply to a received message.",
      "required": [
        "messageId"
      ],
      "properties": {
        "messageId": {
          "description": "ID of the received message to reply to. This is the Message-ID from the email headers.\r\nRequired field.",
          "example": "CADRGmT9vZ+abc123@mail.gmail.com",
          "type": "string"
        },
        "subject": {
          "description": "Email subject line for the reply. If omitted, the original message subject will be used.\r\nMaximum 4,000 characters.",
          "example": "Re: Your inquiry about our services",
          "type": "string",
          "maxLength": 4000,
          "minLength": 0
        },
        "body": {
          "description": "HTML email body content for the reply. Can include personalization placeholders \r\n(e.g., {FirstName}, {Company}) that will be replaced with prospect data.\r\nIf SendAsReply is true, the original message will be appended as a quoted block.",
          "example": "&lt;p&gt;Thank you for your message. Here's my response...&lt;/p&gt;",
          "type": "string"
        },
        "ccEmails": {
          "description": "Comma-separated list of email addresses to include as CC (carbon copy) recipients.\r\nEach email address must be valid. Example: \"cc1@example.com,cc2@example.com\"",
          "example": "manager@example.com,team@example.com",
          "type": "string"
        },
        "bccEmails": {
          "description": "Comma-separated list of email addresses to include as BCC (blind carbon copy) recipients.\r\nEach email address must be valid. Example: \"bcc1@example.com,bcc2@example.com\"",
          "example": "archive@example.com",
          "type": "string"
        },
        "sendAsReply": {
          "description": "If true, appends the original received message as a quoted reply block in the email body.\r\nThe quoted text will include the original sender, timestamp, and message content.\r\nDefault: false",
          "example": "true",
          "type": "boolean",
          "default": false
        },
        "fromEmail": {
          "description": "Sender email address to use for the From header. Must be a valid, configured sender \r\naccount in your organization. If omitted, the system will use the sender from the \r\noriginal received message. Must be a valid email format.",
          "example": "sales@mycompany.com",
          "type": "string"
        },
        "replyToEmail": {
          "description": "Email of the prospect you're replying to (optional). If left empty, it will reply to the thread prospect's email. \r\nIf passed, it will take precedence",
          "example": "prospect@example.com",
          "type": "string",
          "maxLength": 128,
          "minLength": 0
        },
        "attachments": {
          "description": "Optional file attachments for the reply. Not stored in DB; sent in-memory only.\r\nEach item: FileName, ContentType, ContentBase64 (base64-encoded file content).",
          "items": {
            "$ref": "#/definitions/ReplyAttachmentRequest"
          },
          "xml": {
            "name": "ReplyAttachmentRequest",
            "wrapped": true
          },
          "type": "array"
        }
      },
      "xml": {
        "name": "Api2MessageReply"
      },
      "type": "object"
    },
    "PaginationGuid": {
      "description": "Generic pagination metadata for list responses with typed cursor support.",
      "properties": {
        "currentPage": {
          "description": "Current page number (1-indexed)",
          "type": "integer",
          "format": "int32"
        },
        "pageSize": {
          "description": "Number of items per page",
          "type": "integer",
          "format": "int32"
        },
        "totalItems": {
          "description": "Total number of items matching the request filters before page, limit, or startingAfter pagination is applied.",
          "type": "integer",
          "format": "int32"
        },
        "nextCursor": {
          "description": "Cursor for next page (cursor-based pagination)\r\nType depends on the resource's primary key type",
          "example": "00000000-0000-0000-0000-000000000000",
          "type": "string",
          "format": "uuid"
        }
      },
      "xml": {
        "name": "Api2Pagination`1"
      },
      "type": "object"
    },
    "PaginationInteger": {
      "description": "Generic pagination metadata for list responses with typed cursor support.",
      "properties": {
        "currentPage": {
          "description": "Current page number (1-indexed)",
          "type": "integer",
          "format": "int32"
        },
        "pageSize": {
          "description": "Number of items per page",
          "type": "integer",
          "format": "int32"
        },
        "totalItems": {
          "description": "Total number of items matching the request filters before page, limit, or startingAfter pagination is applied.",
          "type": "integer",
          "format": "int32"
        },
        "nextCursor": {
          "description": "Cursor for next page (cursor-based pagination)\r\nType depends on the resource's primary key type",
          "type": "integer",
          "format": "int64"
        }
      },
      "xml": {
        "name": "Api2Pagination`1"
      },
      "type": "object"
    },
    "PaginationNullable`1": {
      "description": "Generic pagination metadata for list responses with typed cursor support.",
      "properties": {
        "currentPage": {
          "description": "Current page number (1-indexed)",
          "type": "integer",
          "format": "int32"
        },
        "pageSize": {
          "description": "Number of items per page",
          "type": "integer",
          "format": "int32"
        },
        "totalItems": {
          "description": "Total number of items matching the request filters before page, limit, or startingAfter pagination is applied.",
          "type": "integer",
          "format": "int32"
        },
        "nextCursor": {
          "description": "Cursor for next page (cursor-based pagination)\r\nType depends on the resource's primary key type",
          "type": "string",
          "format": "date-time"
        }
      },
      "xml": {
        "name": "Api2Pagination`1"
      },
      "type": "object"
    },
    "ParentOrganization": {
      "description": "Minimal parent organization identity for a workspace or clientspace.",
      "properties": {
        "id": {
          "description": "Parent organization identifier.",
          "type": "integer",
          "format": "int32"
        },
        "title": {
          "description": "Parent organization display title.",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2ParentOrganization"
      },
      "type": "object"
    },
    "Prospect": {
      "description": "Prospect object represents a result/response for prospect resource. Prospect is an individual contact receiving\r\ncampaign emails, organized by lists and tags. Prospect contains contact information, company details, custom fields for\r\npersonalization, and sending status for campaign management.",
      "properties": {
        "prospectId": {
          "description": "Unique identifier for the prospect record.",
          "type": "integer",
          "format": "int64"
        },
        "createdAt": {
          "description": "Timestamp when the prospect was created in the system.",
          "type": "string",
          "format": "date-time"
        },
        "email": {
          "description": "Email address of the prospect; must be valid email format with maximum 256 characters.",
          "type": "string"
        },
        "baseListId": {
          "description": "Base mailing list identifier that this prospect belongs to. A value of 0 means the prospect is not assigned to any list.",
          "type": "integer",
          "format": "int32"
        },
        "sendingStatus": {
          "description": "Current sending status code indicating the prospect's campaign participation state.",
          "type": "string",
          "enum": [
            "Unknown",
            "EspMatchNotFound",
            "EspNotAllowed",
            "NoWarmup",
            "NotReceiving",
            "WarmupLimits",
            "SendingLimits",
            "NoSender",
            "Stuck",
            "MailboxInexistent",
            "EmptySubject",
            "EmptyBody",
            "MissingPlaceholder",
            "Invalid",
            "Blacklisted",
            "Stopped",
            "Unsub",
            "BounceHard",
            "BounceSoft",
            "AutoNolonger",
            "AutoOoo",
            "AutoReply",
            "CollegueReplied",
            "SenderDisconnected",
            "Paused",
            "InsufficientCredit",
            "ScheduleInactive",
            "NotInterested",
            "NotSet",
            "Neutral",
            "MaybeLater",
            "Interested",
            "MeetingBooked",
            "MeetingCompleted",
            "Won",
            "Subbed"
          ]
        },
        "sendingActive": {
          "description": "Indicates whether the prospect is active and eligible for sending in campaigns.",
          "type": "boolean"
        },
        "industry": {
          "description": "Industry sector or business category of the prospect's company; maximum 512 characters.",
          "type": "string"
        },
        "city": {
          "description": "City where the prospect is located; maximum 512 characters.",
          "type": "string"
        },
        "website": {
          "description": "Company website URL; maximum 512 characters.",
          "type": "string"
        },
        "phone": {
          "description": "Contact phone number; maximum 512 characters.",
          "type": "string"
        },
        "firstName": {
          "description": "Prospect's first name for personalization; maximum 512 characters.",
          "type": "string"
        },
        "lastName": {
          "description": "Prospect's last name for personalization; maximum 512 characters.",
          "type": "string"
        },
        "company": {
          "description": "Company name where the prospect works; maximum 512 characters.",
          "type": "string"
        },
        "country": {
          "description": "Country where the prospect is located; maximum 512 characters.",
          "type": "string"
        },
        "domain": {
          "description": "Company domain name extracted from email or website; maximum 180 characters.",
          "type": "string"
        },
        "companySocial": {
          "description": "Social media profile URL for the prospect's company; maximum 512 characters.",
          "type": "string"
        },
        "companySize": {
          "description": "Company size description or employee count range; maximum 32 characters.",
          "type": "string"
        },
        "jobPosition": {
          "description": "Job title or position of the prospect within their organization; maximum 512 characters.",
          "type": "string"
        },
        "location": {
          "description": "Geographic location or address of the prospect; maximum 512 characters.",
          "type": "string"
        },
        "personalSocial": {
          "description": "Personal social media profile URL (LinkedIn, Twitter, etc.); maximum 512 characters.",
          "type": "string"
        },
        "customImageUrl": {
          "description": "URL to custom image associated with the prospect; maximum 256 characters.",
          "type": "string"
        },
        "screenshotUrl": {
          "description": "URL to screenshot of the prospect's website or profile; maximum 256 characters.",
          "type": "string"
        },
        "logoUrl": {
          "description": "URL to company logo image; maximum 256 characters.",
          "type": "string"
        },
        "state": {
          "description": "State or province where the prospect is located; maximum 128 characters.",
          "type": "string"
        },
        "icebreaker": {
          "description": "Personalized icebreaker message or conversation starter for this prospect; maximum 4,000 characters.",
          "type": "string"
        },
        "custom1": {
          "description": "Custom field 1 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom2": {
          "description": "Custom field 2 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom3": {
          "description": "Custom field 3 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom4": {
          "description": "Custom field 4 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom5": {
          "description": "Custom field 5 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom6": {
          "description": "Custom field 6 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom7": {
          "description": "Custom field 7 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom8": {
          "description": "Custom field 8 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom9": {
          "description": "Custom field 9 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom10": {
          "description": "Custom field 10 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom11": {
          "description": "Custom field 11 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom12": {
          "description": "Custom field 12 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom13": {
          "description": "Custom field 13 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom14": {
          "description": "Custom field 14 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom15": {
          "description": "Custom field 15 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom16": {
          "description": "Custom field 16 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom17": {
          "description": "Custom field 17 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom18": {
          "description": "Custom field 18 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom19": {
          "description": "Custom field 19 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom20": {
          "description": "Custom field 20 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "notes": {
          "description": "General notes or comments about this prospect for internal reference.",
          "type": "string"
        },
        "tags": {
          "description": "Tags linked to this prospect (from EM_TAG_SUB). Empty list when none.",
          "items": {
            "$ref": "#/definitions/Api2TagRef"
          },
          "xml": {
            "name": "Api2TagRef",
            "wrapped": true
          },
          "type": "array"
        },
        "validatedAt": {
          "description": "UTC date the prospect's email was last validated; null if never validated.",
          "type": "string",
          "format": "date-time"
        },
        "validationStatus": {
          "description": "Email validation verdict for the prospect: Unvalidated, Valid, Invalid, CatchAll, Disposable, or Unknown.",
          "type": "string",
          "enum": [
            "Unvalidated",
            "Valid",
            "Invalid",
            "CatchAll",
            "Disposable",
            "Unknown"
          ]
        }
      },
      "xml": {
        "name": "Api2Prospect"
      },
      "type": "object"
    },
    "ProspectBulkCreate": {
      "description": "ProspectCreate object is used for creating a new prospect resource. Prospect is an individual contact receiving campaign\r\nemails, organized by lists and tags. Prospect contains contact information, company details, custom fields for\r\npersonalization, and sending status for campaign management.",
      "required": [
        "email"
      ],
      "properties": {
        "email": {
          "description": "Email address of the prospect; must be valid email format with maximum 256 characters.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        },
        "sendingStatus": {
          "description": "Current sending status code indicating the prospect's campaign participation state.",
          "type": "string",
          "enum": [
            "Unknown",
            "EspMatchNotFound",
            "EspNotAllowed",
            "NoWarmup",
            "NotReceiving",
            "WarmupLimits",
            "SendingLimits",
            "NoSender",
            "Stuck",
            "MailboxInexistent",
            "EmptySubject",
            "EmptyBody",
            "MissingPlaceholder",
            "Invalid",
            "Blacklisted",
            "Stopped",
            "Unsub",
            "BounceHard",
            "BounceSoft",
            "AutoNolonger",
            "AutoOoo",
            "AutoReply",
            "CollegueReplied",
            "SenderDisconnected",
            "Paused",
            "InsufficientCredit",
            "ScheduleInactive",
            "NotInterested",
            "NotSet",
            "Neutral",
            "MaybeLater",
            "Interested",
            "MeetingBooked",
            "MeetingCompleted",
            "Won",
            "Subbed"
          ]
        },
        "sendingActive": {
          "description": "Indicates whether the prospect is active and eligible for sending in campaigns.",
          "type": "boolean"
        },
        "industry": {
          "description": "Industry sector or business category of the prospect's company; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "city": {
          "description": "City where the prospect is located; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "website": {
          "description": "Company website URL; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "phone": {
          "description": "Contact phone number; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "firstName": {
          "description": "Prospect's first name for personalization; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "lastName": {
          "description": "Prospect's last name for personalization; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "company": {
          "description": "Company name where the prospect works; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "country": {
          "description": "Country where the prospect is located; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "domain": {
          "description": "Company domain name extracted from email or website; maximum 180 characters.",
          "type": "string",
          "maxLength": 180,
          "minLength": 0
        },
        "companySocial": {
          "description": "Social media profile URL for the prospect's company; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "companySize": {
          "description": "Company size description or employee count range; maximum 32 characters.",
          "type": "string",
          "maxLength": 32,
          "minLength": 0
        },
        "jobPosition": {
          "description": "Job title or position of the prospect within their organization; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "location": {
          "description": "Geographic location or address of the prospect; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "personalSocial": {
          "description": "Personal social media profile URL (LinkedIn, Twitter, etc.); maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "customImageUrl": {
          "description": "URL to custom image associated with the prospect; maximum 256 characters.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        },
        "screenshotUrl": {
          "description": "URL to screenshot of the prospect's website or profile; maximum 256 characters.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        },
        "logoUrl": {
          "description": "URL to company logo image; maximum 256 characters.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        },
        "state": {
          "description": "State or province where the prospect is located; maximum 128 characters.",
          "type": "string",
          "maxLength": 128,
          "minLength": 0
        },
        "icebreaker": {
          "description": "Personalized icebreaker message or conversation starter for this prospect; maximum 4,000 characters.",
          "type": "string",
          "maxLength": 4000,
          "minLength": 0
        },
        "custom1": {
          "description": "Custom field 1 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom2": {
          "description": "Custom field 2 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom3": {
          "description": "Custom field 3 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom4": {
          "description": "Custom field 4 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom5": {
          "description": "Custom field 5 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom6": {
          "description": "Custom field 6 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom7": {
          "description": "Custom field 7 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom8": {
          "description": "Custom field 8 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom9": {
          "description": "Custom field 9 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom10": {
          "description": "Custom field 10 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom11": {
          "description": "Custom field 11 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom12": {
          "description": "Custom field 12 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom13": {
          "description": "Custom field 13 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom14": {
          "description": "Custom field 14 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom15": {
          "description": "Custom field 15 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom16": {
          "description": "Custom field 16 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom17": {
          "description": "Custom field 17 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom18": {
          "description": "Custom field 18 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom19": {
          "description": "Custom field 19 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom20": {
          "description": "Custom field 20 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "notes": {
          "description": "General notes or comments about this prospect for internal reference.",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2ProspectBulkCreate"
      },
      "type": "object"
    },
    "ProspectBulkListCreate": {
      "description": "Request model for importing prospect objects through the bulk prospect endpoint.",
      "required": [
        "prospects"
      ],
      "properties": {
        "prospects": {
          "description": "Array of prospect objects to create or update by email.",
          "items": {
            "$ref": "#/definitions/ProspectBulkCreate"
          },
          "xml": {
            "name": "Api2ProspectBulkCreate",
            "wrapped": true
          },
          "type": "array",
          "minLength": 1
        }
      },
      "xml": {
        "name": "Api2ProspectBulkListCreate"
      },
      "type": "object"
    },
    "ProspectCreate": {
      "description": "ProspectCreate object is used for creating a new prospect resource. Prospect is an individual contact receiving campaign\r\nemails, organized by lists and tags. Prospect contains contact information, company details, custom fields for\r\npersonalization, and sending status for campaign management.",
      "required": [
        "email"
      ],
      "properties": {
        "email": {
          "description": "Email address of the prospect; must be valid email format with maximum 256 characters.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        },
        "baseListId": {
          "description": "Optional ID of the list where the prospect will be added. Use the `/lists` endpoint to create or retrieve a\r\nvalid list ID. Must be a positive integer when provided. If omitted, the prospect is created without being\r\nassigned to a list (ListID defaults to 0 in the database).",
          "type": "integer",
          "format": "int32",
          "maximum": 2147483647,
          "minimum": 1
        },
        "sendingStatus": {
          "description": "Current sending status code indicating the prospect's campaign participation state.",
          "type": "string",
          "enum": [
            "Unknown",
            "EspMatchNotFound",
            "EspNotAllowed",
            "NoWarmup",
            "NotReceiving",
            "WarmupLimits",
            "SendingLimits",
            "NoSender",
            "Stuck",
            "MailboxInexistent",
            "EmptySubject",
            "EmptyBody",
            "MissingPlaceholder",
            "Invalid",
            "Blacklisted",
            "Stopped",
            "Unsub",
            "BounceHard",
            "BounceSoft",
            "AutoNolonger",
            "AutoOoo",
            "AutoReply",
            "CollegueReplied",
            "SenderDisconnected",
            "Paused",
            "InsufficientCredit",
            "ScheduleInactive",
            "NotInterested",
            "NotSet",
            "Neutral",
            "MaybeLater",
            "Interested",
            "MeetingBooked",
            "MeetingCompleted",
            "Won",
            "Subbed"
          ]
        },
        "sendingActive": {
          "description": "Indicates whether the prospect is active and eligible for sending in campaigns.",
          "type": "boolean",
          "default": true
        },
        "industry": {
          "description": "Industry sector or business category of the prospect's company; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "city": {
          "description": "City where the prospect is located; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "website": {
          "description": "Company website URL; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "phone": {
          "description": "Contact phone number; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "firstName": {
          "description": "Prospect's first name for personalization; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "lastName": {
          "description": "Prospect's last name for personalization; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "company": {
          "description": "Company name where the prospect works; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "country": {
          "description": "Country where the prospect is located; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "domain": {
          "description": "Company domain name extracted from email or website; maximum 180 characters.",
          "type": "string",
          "maxLength": 180,
          "minLength": 0
        },
        "companySocial": {
          "description": "Social media profile URL for the prospect's company; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "companySize": {
          "description": "Company size description or employee count range; maximum 32 characters.",
          "type": "string",
          "maxLength": 32,
          "minLength": 0
        },
        "jobPosition": {
          "description": "Job title or position of the prospect within their organization; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "location": {
          "description": "Geographic location or address of the prospect; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "personalSocial": {
          "description": "Personal social media profile URL (LinkedIn, Twitter, etc.); maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "customImageUrl": {
          "description": "URL to custom image associated with the prospect; maximum 256 characters.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        },
        "screenshotUrl": {
          "description": "URL to screenshot of the prospect's website or profile; maximum 256 characters.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        },
        "logoUrl": {
          "description": "URL to company logo image; maximum 256 characters.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        },
        "state": {
          "description": "State or province where the prospect is located; maximum 128 characters.",
          "type": "string",
          "maxLength": 128,
          "minLength": 0
        },
        "icebreaker": {
          "description": "Personalized icebreaker message or conversation starter for this prospect; maximum 4,000 characters.",
          "type": "string",
          "maxLength": 4000,
          "minLength": 0
        },
        "custom1": {
          "description": "Custom field 1 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom2": {
          "description": "Custom field 2 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom3": {
          "description": "Custom field 3 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom4": {
          "description": "Custom field 4 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom5": {
          "description": "Custom field 5 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom6": {
          "description": "Custom field 6 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom7": {
          "description": "Custom field 7 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom8": {
          "description": "Custom field 8 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom9": {
          "description": "Custom field 9 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom10": {
          "description": "Custom field 10 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom11": {
          "description": "Custom field 11 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom12": {
          "description": "Custom field 12 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom13": {
          "description": "Custom field 13 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom14": {
          "description": "Custom field 14 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom15": {
          "description": "Custom field 15 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom16": {
          "description": "Custom field 16 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom17": {
          "description": "Custom field 17 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom18": {
          "description": "Custom field 18 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom19": {
          "description": "Custom field 19 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "custom20": {
          "description": "Custom field 20 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string",
          "maxLength": 2000,
          "minLength": 0
        },
        "notes": {
          "description": "General notes or comments about this prospect for internal reference.",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2ProspectCreate"
      },
      "type": "object"
    },
    "ProspectImport": {
      "description": "ProspectImport object represents a result/response for prospectimport resource. ProspectImport is a summary of results\r\nfrom bulk prospect import operations. ProspectImport tracks the number of prospects processed, inserted, updated,\r\nduplicates removed, list subscriptions created, and campaign assignments, providing comprehensive feedback on bulk data\r\noperations.",
      "properties": {
        "totalProcessed": {
          "description": "Total number of prospects processed in the bulk operation including both inserts and updates.",
          "type": "integer",
          "format": "int32"
        },
        "prospectsInserted": {
          "description": "Number of new prospects inserted into the database during the bulk operation.",
          "type": "integer",
          "format": "int32"
        },
        "prospectsUpdated": {
          "description": "Number of existing prospects updated with new information during the bulk operation.",
          "type": "integer",
          "format": "int32"
        },
        "duplicatesInBatch": {
          "description": "Number of duplicate prospect entries identified and removed from the batch before processing.",
          "type": "integer",
          "format": "int32"
        },
        "subscriptionsAdded": {
          "description": "Number of list subscriptions created associating prospects with the specified list.",
          "type": "integer",
          "format": "int32"
        },
        "campaignAdded": {
          "description": "Number of prospects added to the campaign for email sending; only applicable when campaign is specified.",
          "type": "integer",
          "format": "int32"
        },
        "prospectIds": {
          "description": "Prospect IDs affected by the bulk operation.",
          "items": {
            "type": "integer",
            "format": "int64"
          },
          "type": "array"
        },
        "prospectIdByEmail": {
          "description": "Lookup of normalized prospect email to prospect ID for rows affected by the bulk operation.",
          "additionalProperties": {
            "type": "integer",
            "format": "int64"
          },
          "type": "object"
        }
      },
      "xml": {
        "name": "Api2ProspectImport"
      },
      "type": "object"
    },
    "ProspectPage": {
      "description": "ProspectPage object represents a paginated list of prospect resources with cursor-based pagination. Prospect is an\r\nindividual contact receiving campaign emails, organized by lists and tags. Prospect contains contact information,\r\ncompany details, custom fields for personalization, and sending status for campaign management.",
      "properties": {
        "items": {
          "description": "Array of items in the current page",
          "items": {
            "$ref": "#/definitions/Prospect"
          },
          "xml": {
            "name": "Api2Prospect",
            "wrapped": true
          },
          "type": "array"
        },
        "pagination": {
          "$ref": "#/definitions/PaginationInteger",
          "description": "Pagination metadata with typed primary key support"
        }
      },
      "xml": {
        "name": "Api2ProspectPage"
      },
      "type": "object"
    },
    "ProspectTagCreate": {
      "description": "Request model for adding a tag to a prospect",
      "required": [
        "tagId"
      ],
      "properties": {
        "tagId": {
          "description": "Tag ID to add to the prospect",
          "example": "5",
          "type": "integer",
          "format": "int32",
          "maximum": 2147483647,
          "minimum": 1
        }
      },
      "xml": {
        "name": "Api2ProspectTagCreate"
      },
      "type": "object"
    },
    "ProspectUpdate": {
      "description": "ProspectUpdate object is used for updating an existing prospect resource. Prospect is an individual contact receiving\r\ncampaign emails, organized by lists and tags. Prospect contains contact information, company details, custom fields for\r\npersonalization, and sending status for campaign management.",
      "properties": {
        "baseListId": {
          "description": "Base mailing list identifier that this prospect belongs to; must be a positive integer.",
          "type": "integer",
          "format": "int32"
        },
        "sendingStatus": {
          "description": "Current sending status code indicating the prospect's campaign participation state.",
          "type": "string",
          "enum": [
            "Unknown",
            "EspMatchNotFound",
            "EspNotAllowed",
            "NoWarmup",
            "NotReceiving",
            "WarmupLimits",
            "SendingLimits",
            "NoSender",
            "Stuck",
            "MailboxInexistent",
            "EmptySubject",
            "EmptyBody",
            "MissingPlaceholder",
            "Invalid",
            "Blacklisted",
            "Stopped",
            "Unsub",
            "BounceHard",
            "BounceSoft",
            "AutoNolonger",
            "AutoOoo",
            "AutoReply",
            "CollegueReplied",
            "SenderDisconnected",
            "Paused",
            "InsufficientCredit",
            "ScheduleInactive",
            "NotInterested",
            "NotSet",
            "Neutral",
            "MaybeLater",
            "Interested",
            "MeetingBooked",
            "MeetingCompleted",
            "Won",
            "Subbed"
          ]
        },
        "sendingActive": {
          "description": "Indicates whether the prospect is active and eligible for sending in campaigns.",
          "type": "boolean"
        },
        "industry": {
          "description": "Industry sector or business category of the prospect's company; maximum 512 characters.",
          "type": "string"
        },
        "city": {
          "description": "City where the prospect is located; maximum 512 characters.",
          "type": "string"
        },
        "website": {
          "description": "Company website URL; maximum 512 characters.",
          "type": "string"
        },
        "phone": {
          "description": "Contact phone number; maximum 512 characters.",
          "type": "string"
        },
        "firstName": {
          "description": "Prospect's first name for personalization; maximum 512 characters.",
          "type": "string"
        },
        "lastName": {
          "description": "Prospect's last name for personalization; maximum 512 characters.",
          "type": "string"
        },
        "company": {
          "description": "Company name where the prospect works; maximum 512 characters.",
          "type": "string"
        },
        "country": {
          "description": "Country where the prospect is located; maximum 512 characters.",
          "type": "string"
        },
        "domain": {
          "description": "Company domain name extracted from email or website; maximum 180 characters.",
          "type": "string"
        },
        "companySocial": {
          "description": "Social media profile URL for the prospect's company; maximum 512 characters.",
          "type": "string"
        },
        "companySize": {
          "description": "Company size description or employee count range; maximum 32 characters.",
          "type": "string"
        },
        "jobPosition": {
          "description": "Job title or position of the prospect within their organization; maximum 512 characters.",
          "type": "string"
        },
        "location": {
          "description": "Geographic location or address of the prospect; maximum 512 characters.",
          "type": "string"
        },
        "personalSocial": {
          "description": "Personal social media profile URL (LinkedIn, Twitter, etc.); maximum 512 characters.",
          "type": "string"
        },
        "customImageUrl": {
          "description": "URL to custom image associated with the prospect; maximum 256 characters.",
          "type": "string"
        },
        "screenshotUrl": {
          "description": "URL to screenshot of the prospect's website or profile; maximum 256 characters.",
          "type": "string"
        },
        "logoUrl": {
          "description": "URL to company logo image; maximum 256 characters.",
          "type": "string"
        },
        "state": {
          "description": "State or province where the prospect is located; maximum 128 characters.",
          "type": "string"
        },
        "icebreaker": {
          "description": "Personalized icebreaker message or conversation starter for this prospect; maximum 4,000 characters.",
          "type": "string"
        },
        "custom1": {
          "description": "Custom field 1 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom2": {
          "description": "Custom field 2 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom3": {
          "description": "Custom field 3 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom4": {
          "description": "Custom field 4 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom5": {
          "description": "Custom field 5 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom6": {
          "description": "Custom field 6 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom7": {
          "description": "Custom field 7 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom8": {
          "description": "Custom field 8 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom9": {
          "description": "Custom field 9 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom10": {
          "description": "Custom field 10 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom11": {
          "description": "Custom field 11 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom12": {
          "description": "Custom field 12 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom13": {
          "description": "Custom field 13 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom14": {
          "description": "Custom field 14 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom15": {
          "description": "Custom field 15 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom16": {
          "description": "Custom field 16 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom17": {
          "description": "Custom field 17 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom18": {
          "description": "Custom field 18 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom19": {
          "description": "Custom field 19 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "custom20": {
          "description": "Custom field 20 for storing additional prospect-specific data; maximum 2,000 characters.",
          "type": "string"
        },
        "notes": {
          "description": "General notes or comments about this prospect for internal reference.",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2ProspectUpdate"
      },
      "type": "object"
    },
    "ReplyAttachmentRequest": {
      "description": "In-memory reply attachment (base64). Not persisted.",
      "properties": {
        "fileName": {
          "type": "string"
        },
        "contentType": {
          "type": "string"
        },
        "contentBase64": {
          "type": "string"
        }
      },
      "xml": {
        "name": "ReplyAttachmentRequest"
      },
      "type": "object"
    },
    "Sender": {
      "description": "Sender object represents a result/response for sender resource. Sender is an email account used to send campaign\r\nemails. Sender is configurable with custom SMTP/IMAP settings, warmup configurations, and daily sending limits. Sender\r\ncan be associated with multiple campaigns and supports rotation to distribute sending across accounts.",
      "properties": {
        "senderId": {
          "description": "Unique identifier for the sender account.",
          "type": "integer",
          "format": "int64"
        },
        "createdAt": {
          "description": "Timestamp when the sender account was created in the system.",
          "type": "string",
          "format": "date-time"
        },
        "email": {
          "description": "Email address of the sender account used for outgoing campaigns; must be valid email format with maximum 100 characters.",
          "type": "string"
        },
        "folder": {
          "description": "Organizational folder name for grouping and categorizing sender accounts; maximum 64 characters.",
          "type": "string"
        },
        "fromName": {
          "description": "Display name shown as the sender in outgoing emails; maximum 128 characters.",
          "type": "string"
        },
        "accountType": {
          "description": "Type of sender account: customsmtp, gmailsmtp, gmailoauth, msoauth, sendgridapi",
          "type": "string",
          "enum": [
            "CustomSmtp",
            "GmailSmtp",
            "GmailOauth",
            "MsOauth",
            "SendgridApi"
          ]
        },
        "replyTo": {
          "description": "Reply-to email address for responses to campaigns; must be valid email format, maximum 128 characters. If set, Unibox\r\nwill not catch replies unless Reply-to sender is also connected as sender.",
          "type": "string"
        },
        "firstName": {
          "description": "Sender's first name used for personalization in campaigns; maximum 128 characters.",
          "type": "string"
        },
        "lastName": {
          "description": "Sender's last name used for personalization in campaigns; maximum 128 characters.",
          "type": "string"
        },
        "signature": {
          "description": "Email signature HTML content appended to the bottom of outgoing messages.",
          "type": "string"
        },
        "trackingDomain": {
          "description": "Custom domain used for tracking links and open tracking in emails; maximum 256 characters.",
          "type": "string"
        },
        "delayMin": {
          "description": "DEPRECATED: holds MINUTES despite the seconds claim in earlier descriptions. Raw passthrough of EM_SENDER.DelayMin,\r\nwhich the scheduler consumes as minutes. Use delayMinMinutes instead; this field will be removed in v3.",
          "type": "integer",
          "format": "int32",
          "x-deprecated": true
        },
        "delayMinMinutes": {
          "description": "Minimum delay in minutes between sending consecutive emails from this sender. This is the true minutes value of\r\nEM_SENDER.DelayMin; it always equals the deprecated delayMin. Until v3 the campaign resource also carries a\r\ndelayMinMinutes field, which is deprecated and actually holds seconds; this one genuinely holds minutes.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "dailyLimit": {
          "description": "Maximum number of emails this sender can send per day; must be between 1 and 10,000.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimitIncrease": {
          "description": "Enable automatic progressive increase of the daily sending limit to scale up sending capacity over time.",
          "type": "boolean"
        },
        "dailyLimitIncreaseToMax": {
          "description": "Target maximum daily sending limit when using progressive increase; must be greater than current daily limit.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimitIncreasePercent": {
          "description": "Daily percentage increase applied to the sending limit when progressive increase is enabled; must be between 1 and 100.",
          "type": "integer",
          "format": "int32"
        },
        "warmup": {
          "description": "Enable warmup to gradually build sender reputation.",
          "type": "boolean"
        },
        "warmupDailyLimitIncrease": {
          "description": "Enable progressive daily limit increase specifically during the warmup period to gradually build sender reputation.",
          "type": "boolean"
        },
        "warmupDailyLimitIncreaseToMax": {
          "description": "Target maximum daily sending limit to reach during the warmup phase; must be between 1 and 10,000.",
          "type": "integer",
          "format": "int32"
        },
        "warmupDailyLimitIncreasePercent": {
          "description": "Daily percentage increase of the sending limit during warmup period; must be between 1 and 10,000.",
          "type": "integer",
          "format": "int32"
        },
        "warmupDailyLimit": {
          "description": "Initial daily sending limit when starting the warmup process; default 10 emails per day.",
          "type": "integer",
          "format": "int32"
        },
        "warmupReplyPercent": {
          "description": "Percentage of warmup emails that will receive automated replies to simulate natural conversation; must be between 1 and\r\n100.",
          "type": "integer",
          "format": "int32"
        },
        "warmupSkipWeekends": {
          "description": "Skip sending warmup emails on Saturday and Sunday to simulate natural business communication patterns.",
          "type": "boolean"
        },
        "customWarmupTag": {
          "description": "Custom tag applied to emails sent during warmup phase for tracking and filtering purposes; maximum 64 characters.",
          "type": "string"
        },
        "customSmtpServer": {
          "description": "SMTP server hostname for custom email sending configuration; maximum 128 characters.",
          "type": "string"
        },
        "customSmtpPort": {
          "description": "SMTP server port number for custom email sending configuration.",
          "type": "integer",
          "format": "int32"
        },
        "customSmtpUsername": {
          "description": "Custom SMTP username if different from the sender email; maximum 128 characters.",
          "type": "string"
        },
        "customImapServer": {
          "description": "IMAP server hostname for custom email retrieval configuration; maximum 128 characters.",
          "type": "string"
        },
        "customImapPort": {
          "description": "IMAP server port number for custom email retrieval configuration; typically 993 for SSL/TLS.",
          "type": "integer",
          "format": "int32"
        },
        "customImapUsername": {
          "description": "Custom IMAP username if different from the sender email; maximum 128 characters.",
          "type": "string"
        },
        "disconnected": {
          "description": "Indicates whether the sender account is currently disconnected from the email provider due to authentication or\r\nconnection issues.",
          "type": "boolean"
        },
        "dateDisconnected": {
          "description": "Timestamp when the sender account was disconnected from the email provider.",
          "type": "string",
          "format": "date-time"
        },
        "disconnectionReason": {
          "description": "Reason why the sender account was disconnected; maximum 128 characters.",
          "type": "string"
        },
        "dateWarmupDisconnected": {
          "description": "Timestamp when the sender was removed from the public warmup network.",
          "type": "string",
          "format": "date-time"
        },
        "warmupRemovalReason": {
          "description": "Reason why the sender was removed from the public warmup network; maximum 128 characters.",
          "type": "string"
        },
        "senderCustom1": {
          "description": "Custom field 1 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom2": {
          "description": "Custom field 2 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom3": {
          "description": "Custom field 3 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom4": {
          "description": "Custom field 4 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom5": {
          "description": "Custom field 5 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom6": {
          "description": "Custom field 6 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom7": {
          "description": "Custom field 7 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom8": {
          "description": "Custom field 8 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom9": {
          "description": "Custom field 9 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom10": {
          "description": "Custom field 10 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "tags": {
          "description": "Tags linked to this sender (from EM_TAG_SENDER). Empty list when none.",
          "items": {
            "$ref": "#/definitions/Api2TagRef"
          },
          "xml": {
            "name": "Api2TagRef",
            "wrapped": true
          },
          "type": "array"
        }
      },
      "xml": {
        "name": "Api2Sender"
      },
      "type": "object"
    },
    "SenderCreate": {
      "description": "SenderCreate object is used for creating a new sender resource. Sender is an email account used to send campaign\r\nemails. Sender is configurable with custom SMTP/IMAP settings, warmup configurations, and daily sending limits. Sender\r\ncan be associated with multiple campaigns and supports rotation to distribute sending across accounts.",
      "required": [
        "email",
        "dailyLimit",
        "customSmtpServer",
        "customSmtpPort",
        "customSmtpPass",
        "customImapServer",
        "customImapPort",
        "customImapPass"
      ],
      "properties": {
        "email": {
          "description": "Email address of the sender account used for outgoing campaigns; must be valid email format with maximum 100 characters.",
          "type": "string",
          "maxLength": 100,
          "minLength": 0
        },
        "folder": {
          "description": "Organizational folder name for grouping and categorizing sender accounts; maximum 64 characters.",
          "type": "string",
          "maxLength": 64,
          "minLength": 0
        },
        "fromName": {
          "description": "Display name shown as the sender in outgoing emails; maximum 128 characters.",
          "type": "string",
          "maxLength": 128,
          "minLength": 0
        },
        "replyTo": {
          "description": "Reply-to email address for responses to campaigns; must be valid email format, maximum 128 characters. If set, Unibox\r\nwill not catch replies unless Reply-to sender is also connected as sender.",
          "type": "string",
          "maxLength": 128,
          "minLength": 0
        },
        "firstName": {
          "description": "Sender's first name used for personalization in campaigns; maximum 128 characters.",
          "type": "string",
          "maxLength": 128,
          "minLength": 0
        },
        "lastName": {
          "description": "Sender's last name used for personalization in campaigns; maximum 128 characters.",
          "type": "string",
          "maxLength": 128,
          "minLength": 0
        },
        "signature": {
          "description": "Email signature HTML content appended to the bottom of outgoing messages.",
          "type": "string"
        },
        "trackingDomain": {
          "description": "Custom domain used for tracking links and open tracking in emails; maximum 256 characters.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        },
        "delayMin": {
          "description": "DEPRECATED: holds MINUTES despite the seconds claim in earlier descriptions. Writes EM_SENDER.DelayMin raw, which the\r\nscheduler consumes as minutes. Use delayMinMinutes instead, which takes precedence when both are sent; this field will\r\nbe removed in v3.",
          "type": "integer",
          "format": "int32",
          "x-deprecated": true
        },
        "delayMinMinutes": {
          "description": "Minimum delay in minutes between sending consecutive emails from this sender to avoid triggering spam filters. Writes\r\nthe same EM_SENDER.DelayMin column as the deprecated delayMin and takes precedence over it when both are sent. When\r\nneither is sent the default is 10 minutes. Until v3 the campaign resource also carries a delayMinMinutes field, which\r\nis deprecated and actually holds seconds; this one genuinely holds minutes.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimit": {
          "description": "Maximum number of emails this sender can send per day; must be between 1 and 10,000.",
          "type": "integer",
          "format": "int32",
          "maximum": 10000,
          "minimum": 1
        },
        "dailyLimitIncrease": {
          "description": "Enable automatic progressive increase of the daily sending limit to scale up sending capacity over time.",
          "type": "boolean"
        },
        "dailyLimitIncreaseToMax": {
          "description": "Target maximum daily sending limit when using progressive increase; must be greater than current daily limit.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimitIncreasePercent": {
          "description": "Daily percentage increase applied to the sending limit when progressive increase is enabled; must be between 1 and 100.",
          "type": "integer",
          "format": "int32"
        },
        "warmup": {
          "description": "Enable warmup to gradually build sender reputation.",
          "type": "boolean",
          "default": false
        },
        "warmupDailyLimitIncrease": {
          "description": "Enable progressive daily limit increase specifically during the warmup period to gradually build sender reputation.",
          "type": "boolean"
        },
        "warmupDailyLimitIncreaseToMax": {
          "description": "Target maximum daily sending limit to reach during the warmup phase; must be between 1 and 10,000.",
          "type": "integer",
          "format": "int32",
          "maximum": 10000,
          "minimum": 0
        },
        "warmupDailyLimitIncreasePercent": {
          "description": "Daily percentage increase of the sending limit during warmup period; must be between 1 and 10,000.",
          "type": "integer",
          "format": "int32",
          "maximum": 10000,
          "minimum": 0
        },
        "warmupDailyLimit": {
          "description": "Initial daily sending limit when starting the warmup process; default 10 emails per day.",
          "type": "integer",
          "format": "int32"
        },
        "warmupReplyPercent": {
          "description": "Percentage of warmup emails that will receive automated replies to simulate natural conversation; must be between 1 and\r\n100.",
          "type": "integer",
          "format": "int32"
        },
        "warmupSkipWeekends": {
          "description": "Skip sending warmup emails on Saturday and Sunday to simulate natural business communication patterns.",
          "type": "boolean"
        },
        "customWarmupTag": {
          "description": "Custom tag applied to emails sent during warmup phase for tracking and filtering purposes; maximum 64 characters.",
          "type": "string",
          "maxLength": 64,
          "minLength": 0
        },
        "customSmtpServer": {
          "description": "SMTP server hostname for custom email sending configuration; maximum 128 characters.",
          "type": "string",
          "maxLength": 128,
          "minLength": 0
        },
        "customSmtpPort": {
          "description": "SMTP server port number for custom email sending configuration.",
          "type": "integer",
          "format": "int32"
        },
        "customSmtpUsername": {
          "description": "Custom SMTP username if different from the sender email; maximum 128 characters.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        },
        "customSmtpPass": {
          "description": "Password for custom SMTP server authentication; maximum 256 characters, stored securely.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        },
        "customImapServer": {
          "description": "IMAP server hostname for custom email retrieval configuration; maximum 128 characters.",
          "type": "string",
          "maxLength": 128,
          "minLength": 0
        },
        "customImapPort": {
          "description": "IMAP server port number for custom email retrieval configuration; typically 993 for SSL/TLS.",
          "type": "integer",
          "format": "int32",
          "maximum": 65535,
          "minimum": 1
        },
        "customImapUsername": {
          "description": "Custom IMAP username if different from the sender email; maximum 128 characters.",
          "type": "string",
          "maxLength": 128,
          "minLength": 0
        },
        "customImapPass": {
          "description": "Password for custom IMAP server authentication; maximum 256 characters, stored securely.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        },
        "senderCustom1": {
          "description": "Custom field 1 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string",
          "maxLength": 4000,
          "minLength": 0
        },
        "senderCustom2": {
          "description": "Custom field 2 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string",
          "maxLength": 4000,
          "minLength": 0
        },
        "senderCustom3": {
          "description": "Custom field 3 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string",
          "maxLength": 4000,
          "minLength": 0
        },
        "senderCustom4": {
          "description": "Custom field 4 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string",
          "maxLength": 4000,
          "minLength": 0
        },
        "senderCustom5": {
          "description": "Custom field 5 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string",
          "maxLength": 4000,
          "minLength": 0
        },
        "senderCustom6": {
          "description": "Custom field 6 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string",
          "maxLength": 4000,
          "minLength": 0
        },
        "senderCustom7": {
          "description": "Custom field 7 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string",
          "maxLength": 4000,
          "minLength": 0
        },
        "senderCustom8": {
          "description": "Custom field 8 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string",
          "maxLength": 4000,
          "minLength": 0
        },
        "senderCustom9": {
          "description": "Custom field 9 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string",
          "maxLength": 4000,
          "minLength": 0
        },
        "senderCustom10": {
          "description": "Custom field 10 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string",
          "maxLength": 4000,
          "minLength": 0
        }
      },
      "xml": {
        "name": "Api2SenderCreate"
      },
      "type": "object"
    },
    "SenderPage": {
      "description": "SenderPage object represents a paginated list of sender resources with cursor-based pagination. Sender is an email\r\naccount used to send campaign emails. Sender is configurable with custom SMTP/IMAP settings, warmup configurations, and\r\ndaily sending limits. Sender can be associated with multiple campaigns and supports rotation to distribute sending\r\nacross accounts.",
      "properties": {
        "items": {
          "description": "Array of items in the current page",
          "items": {
            "$ref": "#/definitions/Sender"
          },
          "xml": {
            "name": "Api2Sender",
            "wrapped": true
          },
          "type": "array"
        },
        "pagination": {
          "$ref": "#/definitions/PaginationInteger",
          "description": "Pagination metadata with typed primary key support"
        }
      },
      "xml": {
        "name": "Api2SenderPage"
      },
      "type": "object"
    },
    "SenderTagCreate": {
      "description": "Request model for adding a tag to a sender",
      "required": [
        "tagId"
      ],
      "properties": {
        "tagId": {
          "description": "Tag ID to add to the sender",
          "example": "5",
          "type": "integer",
          "format": "int32",
          "maximum": 2147483647,
          "minimum": 1
        }
      },
      "xml": {
        "name": "Api2SenderTagCreate"
      },
      "type": "object"
    },
    "SenderUpdate": {
      "description": "SenderUpdate object is used for updating an existing sender resource. Sender is an email account used to send campaign\r\nemails. Sender is configurable with custom SMTP/IMAP settings, warmup configurations, and daily sending limits. Sender\r\ncan be associated with multiple campaigns and supports rotation to distribute sending across accounts.",
      "properties": {
        "folder": {
          "description": "Organizational folder name for grouping and categorizing sender accounts; maximum 64 characters.",
          "type": "string"
        },
        "fromName": {
          "description": "Display name shown as the sender in outgoing emails; maximum 128 characters.",
          "type": "string"
        },
        "replyTo": {
          "description": "Reply-to email address for responses to campaigns; must be valid email format, maximum 128 characters. If set, Unibox\r\nwill not catch replies unless Reply-to sender is also connected as sender.",
          "type": "string"
        },
        "firstName": {
          "description": "Sender's first name used for personalization in campaigns; maximum 128 characters.",
          "type": "string"
        },
        "lastName": {
          "description": "Sender's last name used for personalization in campaigns; maximum 128 characters.",
          "type": "string"
        },
        "signature": {
          "description": "Email signature HTML content appended to the bottom of outgoing messages.",
          "type": "string"
        },
        "trackingDomain": {
          "description": "Custom domain used for tracking links and open tracking in emails; maximum 256 characters.",
          "type": "string"
        },
        "delayMin": {
          "description": "DEPRECATED: holds MINUTES despite the seconds claim in earlier descriptions. Writes EM_SENDER.DelayMin raw, which the\r\nscheduler consumes as minutes. Use delayMinMinutes instead, which takes precedence when both are sent; this field will\r\nbe removed in v3.",
          "type": "integer",
          "format": "int32",
          "x-deprecated": true
        },
        "delayMinMinutes": {
          "description": "Minimum delay in minutes between sending consecutive emails from this sender to avoid triggering spam filters. Writes\r\nthe same EM_SENDER.DelayMin column as the deprecated delayMin and takes precedence over it when both are sent. Until v3\r\nthe campaign resource also carries a delayMinMinutes field, which is deprecated and actually holds seconds; this one\r\ngenuinely holds minutes.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimit": {
          "description": "Maximum number of emails this sender can send per day; must be between 1 and 10,000.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimitIncrease": {
          "description": "Enable automatic progressive increase of the daily sending limit to scale up sending capacity over time.",
          "type": "boolean"
        },
        "dailyLimitIncreaseToMax": {
          "description": "Target maximum daily sending limit when using progressive increase; must be greater than current daily limit.",
          "type": "integer",
          "format": "int32"
        },
        "dailyLimitIncreasePercent": {
          "description": "Daily percentage increase applied to the sending limit when progressive increase is enabled; must be between 1 and 100.",
          "type": "integer",
          "format": "int32"
        },
        "warmup": {
          "description": "Enable warmup to gradually build sender reputation.",
          "type": "boolean"
        },
        "warmupDailyLimitIncrease": {
          "description": "Enable progressive daily limit increase specifically during the warmup period to gradually build sender reputation.",
          "type": "boolean"
        },
        "warmupDailyLimitIncreaseToMax": {
          "description": "Target maximum daily sending limit to reach during the warmup phase; must be between 1 and 10,000.",
          "type": "integer",
          "format": "int32"
        },
        "warmupDailyLimitIncreasePercent": {
          "description": "Daily percentage increase of the sending limit during warmup period; must be between 1 and 10,000.",
          "type": "integer",
          "format": "int32"
        },
        "warmupDailyLimit": {
          "description": "Initial daily sending limit when starting the warmup process; default 10 emails per day.",
          "type": "integer",
          "format": "int32"
        },
        "warmupReplyPercent": {
          "description": "Percentage of warmup emails that will receive automated replies to simulate natural conversation; must be between 1 and\r\n100.",
          "type": "integer",
          "format": "int32"
        },
        "warmupSkipWeekends": {
          "description": "Skip sending warmup emails on Saturday and Sunday to simulate natural business communication patterns.",
          "type": "boolean"
        },
        "customWarmupTag": {
          "description": "Custom tag applied to emails sent during warmup phase for tracking and filtering purposes; maximum 64 characters.",
          "type": "string"
        },
        "customSmtpServer": {
          "description": "SMTP server hostname for custom email sending configuration; maximum 128 characters.",
          "type": "string"
        },
        "customSmtpPort": {
          "description": "SMTP server port number for custom email sending configuration.",
          "type": "integer",
          "format": "int32"
        },
        "customSmtpUsername": {
          "description": "Custom SMTP username if different from the sender email; maximum 128 characters.",
          "type": "string"
        },
        "customSmtpPass": {
          "description": "Password for custom SMTP server authentication; maximum 256 characters, stored securely.",
          "type": "string"
        },
        "customImapServer": {
          "description": "IMAP server hostname for custom email retrieval configuration; maximum 128 characters.",
          "type": "string"
        },
        "customImapPort": {
          "description": "IMAP server port number for custom email retrieval configuration; typically 993 for SSL/TLS.",
          "type": "integer",
          "format": "int32"
        },
        "customImapUsername": {
          "description": "Custom IMAP username if different from the sender email; maximum 128 characters.",
          "type": "string"
        },
        "customImapPass": {
          "description": "Password for custom IMAP server authentication; maximum 256 characters, stored securely.",
          "type": "string"
        },
        "senderCustom1": {
          "description": "Custom field 1 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom2": {
          "description": "Custom field 2 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom3": {
          "description": "Custom field 3 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom4": {
          "description": "Custom field 4 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom5": {
          "description": "Custom field 5 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom6": {
          "description": "Custom field 6 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom7": {
          "description": "Custom field 7 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom8": {
          "description": "Custom field 8 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom9": {
          "description": "Custom field 9 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        },
        "senderCustom10": {
          "description": "Custom field 10 for storing additional sender-specific data; maximum 4,000 characters.",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2SenderUpdate"
      },
      "type": "object"
    },
    "SendingCreditStatus": {
      "description": "Available sending credit balance for the authenticated account.",
      "properties": {
        "balance": {
          "description": "Effective available sending credits, including shared or allocated credits for sub-accounts.",
          "type": "integer",
          "format": "int64"
        }
      },
      "xml": {
        "name": "Api2SendingCreditStatus"
      },
      "type": "object"
    },
    "Sequence": {
      "description": "Sequence object represents a result/response for sequence resource. Sequence is a conditional branch within a\r\ncampaign containing followup emails triggered by prospect actions like opens, clicks, or replies. Sequence has\r\nconfigurable conditions and operators controlling when prospects enter the sequence path and receive associated emails.",
      "properties": {
        "sequenceId": {
          "description": "Unique identifier for the email sequence.",
          "type": "integer",
          "format": "int64"
        },
        "name": {
          "description": "Descriptive name of the sequence; maximum 64 characters.",
          "type": "string"
        },
        "shortName": {
          "description": "Short abbreviated name for quick reference in reporting and UI; maximum 8 characters.",
          "type": "string"
        },
        "conditionExtra": {
          "description": "Apply an additional condition to trigger this sequence beyond the base conditions.",
          "type": "boolean"
        },
        "conditionNegate": {
          "description": "Negate (invert) the sequence trigger condition logic.",
          "type": "boolean"
        },
        "conditionTimes": {
          "description": "Number of times the condition must be met before triggering the sequence; must be between 0 and 100.",
          "type": "integer",
          "format": "int32"
        },
        "conditionReply": {
          "description": "Reply-based condition operator for triggering this sequence.",
          "type": "string",
          "enum": [
            "All",
            "Opened",
            "NotOpened",
            "NotReplied",
            "Replied",
            "RepliedInterested",
            "RepliedNotInterested",
            "RepliedNeutral",
            "RepliedMaybeLater",
            "Converted",
            "NotConverted",
            "Won",
            "MeetingBooked",
            "MeetingCompleted"
          ]
        },
        "conditionAction": {
          "description": "Action-based condition type for triggering this sequence. Null when the stored value is absent or not a recognized action;\r\nnote that an explicit null cannot be written back through PATCH, omit the field instead.",
          "type": "string",
          "enum": [
            "Opened",
            "Clicked",
            "Bounced",
            "Unsubscribed",
            "Converted",
            "Replied"
          ]
        },
        "conditionOperator": {
          "description": "Comparison operator for evaluating sequence conditions. Null when the stored value is absent or not a recognized operator;\r\nnote that an explicit null cannot be written back through PATCH, omit the field instead.",
          "type": "string",
          "enum": [
            "GreaterThanOrEqual",
            "LessThanOrEqual",
            "Equal",
            "NotEqual",
            "GreaterThan",
            "LessThan"
          ]
        }
      },
      "xml": {
        "name": "Api2Sequence"
      },
      "type": "object"
    },
    "SequenceCreate": {
      "description": "SequenceCreate object is used for creating a new sequence resource. Sequence is a conditional branch within a campaign\r\ncontaining followup emails triggered by prospect actions like opens, clicks, or replies. Sequence has configurable\r\nconditions and operators controlling when prospects enter the sequence path and receive associated emails.",
      "properties": {
        "name": {
          "description": "Descriptive name of the sequence; maximum 64 characters.",
          "type": "string",
          "maxLength": 64,
          "minLength": 0
        },
        "shortName": {
          "description": "Short abbreviated name for quick reference in reporting and UI; maximum 8 characters.",
          "type": "string",
          "maxLength": 8,
          "minLength": 0
        },
        "conditionExtra": {
          "description": "Apply an additional condition to trigger this sequence beyond the base conditions.",
          "type": "boolean"
        },
        "conditionNegate": {
          "description": "Negate (invert) the sequence trigger condition logic.",
          "type": "boolean"
        },
        "conditionTimes": {
          "description": "Number of times the condition must be met before triggering the sequence; must be between 0 and 100.",
          "type": "integer",
          "format": "int32",
          "maximum": 100,
          "minimum": 0
        },
        "conditionReply": {
          "description": "Reply-based condition operator for triggering this sequence.",
          "type": "string",
          "enum": [
            "All",
            "Opened",
            "NotOpened",
            "NotReplied",
            "Replied",
            "RepliedInterested",
            "RepliedNotInterested",
            "RepliedNeutral",
            "RepliedMaybeLater",
            "Converted",
            "NotConverted",
            "Won",
            "MeetingBooked",
            "MeetingCompleted"
          ]
        },
        "conditionAction": {
          "description": "Action-based condition type for triggering this sequence.",
          "type": "string",
          "enum": [
            "Opened",
            "Clicked",
            "Bounced",
            "Unsubscribed",
            "Converted",
            "Replied"
          ]
        },
        "conditionOperator": {
          "description": "Comparison operator for evaluating sequence conditions.",
          "type": "string",
          "enum": [
            "GreaterThanOrEqual",
            "LessThanOrEqual",
            "Equal",
            "NotEqual",
            "GreaterThan",
            "LessThan"
          ]
        }
      },
      "xml": {
        "name": "Api2SequenceCreate"
      },
      "type": "object"
    },
    "SequencePage": {
      "description": "SequencePage object represents a paginated list of sequence resources with cursor-based pagination. Sequence is a\r\nconditional branch within a campaign containing followup emails triggered by prospect actions like opens, clicks, or\r\nreplies. Sequence has configurable conditions and operators controlling when prospects enter the sequence path and\r\nreceive associated emails.",
      "properties": {
        "items": {
          "description": "Array of items in the current page",
          "items": {
            "$ref": "#/definitions/Sequence"
          },
          "xml": {
            "name": "Api2Sequence",
            "wrapped": true
          },
          "type": "array"
        },
        "pagination": {
          "$ref": "#/definitions/PaginationInteger",
          "description": "Pagination metadata with typed primary key support"
        }
      },
      "xml": {
        "name": "Api2SequencePage"
      },
      "type": "object"
    },
    "SequenceUpdate": {
      "description": "SequenceUpdate object is used for updating an existing sequence resource. Sequence is a conditional branch within a\r\ncampaign containing followup emails triggered by prospect actions like opens, clicks, or replies. Sequence has\r\nconfigurable conditions and operators controlling when prospects enter the sequence path and receive associated emails.",
      "properties": {
        "name": {
          "description": "Descriptive name of the sequence; maximum 64 characters.",
          "type": "string"
        },
        "shortName": {
          "description": "Short abbreviated name for quick reference in reporting and UI; maximum 8 characters.",
          "type": "string"
        },
        "conditionExtra": {
          "description": "Apply an additional condition to trigger this sequence beyond the base conditions.",
          "type": "boolean"
        },
        "conditionNegate": {
          "description": "Negate (invert) the sequence trigger condition logic.",
          "type": "boolean"
        },
        "conditionTimes": {
          "description": "Number of times the condition must be met before triggering the sequence; must be between 0 and 100.",
          "type": "integer",
          "format": "int32"
        },
        "conditionReply": {
          "description": "Reply-based condition operator for triggering this sequence.",
          "type": "string",
          "enum": [
            "All",
            "Opened",
            "NotOpened",
            "NotReplied",
            "Replied",
            "RepliedInterested",
            "RepliedNotInterested",
            "RepliedNeutral",
            "RepliedMaybeLater",
            "Converted",
            "NotConverted",
            "Won",
            "MeetingBooked",
            "MeetingCompleted"
          ]
        },
        "conditionAction": {
          "description": "Action-based condition type for triggering this sequence.",
          "type": "string",
          "enum": [
            "Opened",
            "Clicked",
            "Bounced",
            "Unsubscribed",
            "Converted",
            "Replied"
          ]
        },
        "conditionOperator": {
          "description": "Comparison operator for evaluating sequence conditions.",
          "type": "string",
          "enum": [
            "GreaterThanOrEqual",
            "LessThanOrEqual",
            "Equal",
            "NotEqual",
            "GreaterThan",
            "LessThan"
          ]
        }
      },
      "xml": {
        "name": "Api2SequenceUpdate"
      },
      "type": "object"
    },
    "Tag": {
      "description": "Tag object represents a result/response for tag resource. Tag is a label organizing and categorizing prospects\r\nfor segmentation and filtering. Tag provides flexible categorization where each prospect can have multiple tags,\r\nenabling advanced targeting and prospect management across campaigns.",
      "properties": {
        "tagId": {
          "description": "Unique identifier for the tag.",
          "type": "integer",
          "format": "int32"
        },
        "createdAt": {
          "description": "Timestamp when the tag was created in the system.",
          "type": "string",
          "format": "date-time"
        },
        "title": {
          "description": "Tag name used for organizing and categorizing prospects; maximum 128 characters.",
          "type": "string"
        },
        "description": {
          "description": "Optional description explaining the purpose or criteria for this tag; maximum 1,000 characters.",
          "type": "string"
        },
        "tagType": {
          "description": "Tag classification: Crm (prospect/CRM), Campaign, or Sender.",
          "type": "string",
          "enum": [
            "Campaign",
            "Crm",
            "Sender"
          ]
        }
      },
      "xml": {
        "name": "Api2Tag"
      },
      "type": "object"
    },
    "TagCreate": {
      "description": "TagCreate object is used for creating a new tag resource. Tag is a label organizing and categorizing prospects for\r\nsegmentation and filtering. Tag provides flexible categorization where each prospect can have multiple tags, enabling\r\nadvanced targeting and prospect management across campaigns.",
      "required": [
        "title"
      ],
      "properties": {
        "title": {
          "description": "Tag name used for organizing and categorizing prospects; required. Maximum 128 characters.",
          "type": "string",
          "maxLength": 128,
          "minLength": 0
        },
        "tagType": {
          "description": "Tag classification: Crm (prospect/CRM), Campaign, or Sender. Defaults to Crm for new API tags.",
          "type": "string",
          "enum": [
            "Campaign",
            "Crm",
            "Sender"
          ]
        },
        "description": {
          "description": "Optional description explaining the purpose or criteria for this tag; maximum 1,000 characters.",
          "type": "string",
          "maxLength": 1000,
          "minLength": 0
        }
      },
      "xml": {
        "name": "Api2TagCreate"
      },
      "type": "object"
    },
    "TagPage": {
      "description": "TagPage object represents a paginated list of tag resources with cursor-based pagination. Tag is a label organizing and\r\ncategorizing prospects for segmentation and filtering. Tag provides flexible categorization where each prospect can have\r\nmultiple tags, enabling advanced targeting and prospect management across campaigns.",
      "properties": {
        "items": {
          "description": "Array of items in the current page",
          "items": {
            "$ref": "#/definitions/Tag"
          },
          "xml": {
            "name": "Api2Tag",
            "wrapped": true
          },
          "type": "array"
        },
        "pagination": {
          "$ref": "#/definitions/PaginationInteger",
          "description": "Pagination metadata with typed primary key support"
        }
      },
      "xml": {
        "name": "Api2TagPage"
      },
      "type": "object"
    },
    "TagUpdate": {
      "description": "TagUpdate object is used for updating an existing tag resource. Tag is a label organizing and categorizing prospects\r\nfor segmentation and filtering. Tag provides flexible categorization where each prospect can have multiple tags,\r\nenabling advanced targeting and prospect management across campaigns.",
      "properties": {
        "title": {
          "description": "Tag name used for organizing and categorizing prospects; maximum 128 characters.",
          "type": "string"
        },
        "description": {
          "description": "Optional description explaining the purpose or criteria for this tag; maximum 1,000 characters.",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2TagUpdate"
      },
      "type": "object"
    },
    "User": {
      "description": "User object represents a result/response for user resource. User is an account with platform access for\r\nmanaging campaigns, prospects, and other resources within their organization. User has a unique identifier, email\r\naddress, and role-based permissions controlling access level and capabilities.",
      "properties": {
        "userId": {
          "description": "Unique identifier for the user account, represented as a GUID.",
          "example": "00000000-0000-0000-0000-000000000000",
          "type": "string",
          "format": "uuid"
        },
        "createdAt": {
          "description": "Timestamp when the user account was registered in the system.",
          "type": "string",
          "format": "date-time"
        },
        "email": {
          "description": "Email address of the user account; must be valid email format with maximum 128 characters.",
          "type": "string"
        },
        "emailConfirmed": {
          "description": "Indicates whether the user has confirmed their email address through the verification process.",
          "type": "boolean"
        },
        "firstName": {
          "description": "User's first name for identification and personalization; maximum 512 characters.",
          "type": "string"
        },
        "lastName": {
          "description": "User's last name for identification and personalization; maximum 512 characters.",
          "type": "string"
        },
        "accountType": {
          "description": "User's permission level: 110 - SuperAdmin, 100 - Admin, 30 - User, 23 - SenderOnly, 22 - ReportOnly, 21 - Unibox Only\r\netc...",
          "type": "string",
          "enum": [
            "SingleUnibox",
            "SingleReports",
            "SingleSenders",
            "User",
            "Editor",
            "Admin",
            "SuperAdmin"
          ]
        }
      },
      "xml": {
        "name": "Api2User"
      },
      "type": "object"
    },
    "UserCreate": {
      "description": "UserCreate object is used for creating a new user resource. User is an account with platform access for managing\r\ncampaigns, prospects, and other resources within their organization. User has a unique identifier, email address, and\r\nrole-based permissions controlling access level and capabilities.",
      "required": [
        "email"
      ],
      "properties": {
        "email": {
          "description": "Email address of the user account; must be valid email format with maximum 128 characters.",
          "type": "string",
          "maxLength": 128,
          "minLength": 0
        },
        "firstName": {
          "description": "User's first name for identification and personalization; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "lastName": {
          "description": "User's last name for identification and personalization; maximum 512 characters.",
          "type": "string",
          "maxLength": 512,
          "minLength": 0
        },
        "accountType": {
          "description": "User's permission level: 110 - SuperAdmin, 100 - Admin, 30 - User, 23 - SenderOnly, 22 - ReportOnly, 21 - Unibox Only\r\netc...",
          "type": "string",
          "enum": [
            "SingleUnibox",
            "SingleReports",
            "SingleSenders",
            "User",
            "Editor",
            "Admin",
            "SuperAdmin"
          ]
        }
      },
      "xml": {
        "name": "Api2UserCreate"
      },
      "type": "object"
    },
    "UserPage": {
      "description": "UserPage object represents a paginated list of user resources with cursor-based pagination. User is an account with\r\nplatform access for managing campaigns, prospects, and other resources within their organization. User has a unique\r\nidentifier, email address, and role-based permissions controlling access level and capabilities.",
      "properties": {
        "items": {
          "description": "Array of items in the current page",
          "items": {
            "$ref": "#/definitions/User"
          },
          "xml": {
            "name": "Api2User",
            "wrapped": true
          },
          "type": "array"
        },
        "pagination": {
          "$ref": "#/definitions/PaginationGuid",
          "description": "Pagination metadata with typed primary key support"
        }
      },
      "xml": {
        "name": "Api2UserPage"
      },
      "type": "object"
    },
    "UserUpdate": {
      "description": "UserUpdate object is used for updating an existing user resource. User is an account with platform access for\r\nmanaging campaigns, prospects, and other resources within their organization. User has a unique identifier, email\r\naddress, and role-based permissions controlling access level and capabilities.",
      "properties": {
        "firstName": {
          "description": "User's first name for identification and personalization; maximum 512 characters.",
          "type": "string"
        },
        "lastName": {
          "description": "User's last name for identification and personalization; maximum 512 characters.",
          "type": "string"
        },
        "accountType": {
          "description": "User's permission level: 110 - SuperAdmin, 100 - Admin, 30 - User, 23 - SenderOnly, 22 - ReportOnly, 21 - Unibox Only\r\netc...",
          "type": "string",
          "enum": [
            "SingleUnibox",
            "SingleReports",
            "SingleSenders",
            "User",
            "Editor",
            "Admin",
            "SuperAdmin"
          ]
        }
      },
      "xml": {
        "name": "Api2UserUpdate"
      },
      "type": "object"
    },
    "ValidationBatchItem": {
      "description": "Per-email validation status for one item in a validation batch.",
      "properties": {
        "prospectId": {
          "description": "Prospect ID created or used for validation.",
          "type": "integer",
          "format": "int64"
        },
        "email": {
          "description": "Email address submitted for validation.",
          "type": "string"
        },
        "validationStatus": {
          "description": "Current validation status for the email.",
          "type": "string",
          "enum": [
            "Unvalidated",
            "Valid",
            "Invalid",
            "CatchAll",
            "Disposable",
            "Unknown"
          ]
        },
        "validatedAt": {
          "description": "When the email was last validated. Null while still in progress or never validated.",
          "type": "string",
          "format": "date-time"
        },
        "inProgress": {
          "description": "True while this prospect is still waiting for validation result webhook processing.",
          "type": "boolean"
        }
      },
      "xml": {
        "name": "Api2ValidationBatchItem"
      },
      "type": "object"
    },
    "ValidationBatchStatus": {
      "description": "Validation batch status and aggregate result counts.",
      "properties": {
        "batchId": {
          "description": "Validation batch ID.",
          "example": "00000000-0000-0000-0000-000000000000",
          "type": "string",
          "format": "uuid"
        },
        "status": {
          "description": "Current status: InProgress or Completed.",
          "type": "string"
        },
        "source": {
          "description": "Batch source: api, crm_bulk, or campaign_auto.",
          "type": "string"
        },
        "submitted": {
          "description": "Total input items submitted by the API caller.",
          "type": "integer",
          "format": "int32"
        },
        "queued": {
          "description": "Number of prospects queued for validation.",
          "type": "integer",
          "format": "int32"
        },
        "completed": {
          "description": "Number of validation items completed so far.",
          "type": "integer",
          "format": "int32"
        },
        "completedJobs": {
          "description": "Number of completed platform sub-jobs.",
          "type": "integer",
          "format": "int32"
        },
        "totalJobs": {
          "description": "Total platform sub-jobs in this batch.",
          "type": "integer",
          "format": "int32"
        },
        "results": {
          "$ref": "#/definitions/ValidationResultCounts",
          "description": "Aggregate validation result counts."
        },
        "skipped": {
          "$ref": "#/definitions/ValidationSkippedCounts",
          "description": "Items skipped before validation."
        },
        "dataTokensSpent": {
          "description": "Data Tokens charged for this batch so far.",
          "type": "integer",
          "format": "int64"
        },
        "items": {
          "description": "Per-email validation status for the prospects included in this batch.",
          "items": {
            "$ref": "#/definitions/ValidationBatchItem"
          },
          "xml": {
            "name": "Api2ValidationBatchItem",
            "wrapped": true
          },
          "type": "array"
        },
        "createdAt": {
          "description": "Batch creation timestamp in UTC.",
          "type": "string",
          "format": "date-time"
        },
        "completedAt": {
          "description": "Batch completion timestamp in UTC, or null while still running.",
          "type": "string",
          "format": "date-time"
        }
      },
      "xml": {
        "name": "Api2ValidationBatchStatus"
      },
      "type": "object"
    },
    "ValidationResultCounts": {
      "description": "Aggregate validation result counts.",
      "properties": {
        "valid": {
          "type": "integer",
          "format": "int32"
        },
        "invalid": {
          "type": "integer",
          "format": "int32"
        },
        "catchAll": {
          "type": "integer",
          "format": "int32"
        },
        "disposable": {
          "type": "integer",
          "format": "int32"
        },
        "unknown": {
          "type": "integer",
          "format": "int32"
        },
        "unvalidated": {
          "type": "integer",
          "format": "int32"
        }
      },
      "xml": {
        "name": "Api2ValidationResultCounts"
      },
      "type": "object"
    },
    "ValidationSkippedCounts": {
      "description": "Items skipped before creating platform validation jobs.",
      "properties": {
        "recentlyValidated": {
          "type": "integer",
          "format": "int32"
        },
        "duplicate": {
          "type": "integer",
          "format": "int32"
        }
      },
      "xml": {
        "name": "Api2ValidationSkippedCounts"
      },
      "type": "object"
    },
    "ValidationSubmitRequest": {
      "description": "Request to submit emails or existing prospects for asynchronous email validation.",
      "properties": {
        "emails": {
          "description": "Email addresses to validate. Missing emails are created as CRM prospects before validation.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "prospectIds": {
          "description": "Existing prospect IDs to validate. Use this when you already store ManyReach prospect IDs.",
          "items": {
            "type": "integer",
            "format": "int64"
          },
          "type": "array"
        }
      },
      "xml": {
        "name": "Api2ValidationSubmitRequest"
      },
      "type": "object"
    },
    "ValidationSubmitResponse": {
      "description": "Response returned after a validation batch has been queued.",
      "properties": {
        "mode": {
          "description": "Processing mode. Current implementation is always async.",
          "type": "string"
        },
        "batchId": {
          "description": "Validation batch ID to use with the batch status endpoint.",
          "example": "00000000-0000-0000-0000-000000000000",
          "type": "string",
          "format": "uuid"
        },
        "status": {
          "description": "Current batch status.",
          "type": "string"
        },
        "submitted": {
          "description": "Total input items submitted by the API caller.",
          "type": "integer",
          "format": "int32"
        },
        "queued": {
          "description": "Number of prospects queued for validation after freshness and duplicate filtering.",
          "type": "integer",
          "format": "int32"
        },
        "createdProspects": {
          "description": "Number of raw emails inserted into CRM as new prospects.",
          "type": "integer",
          "format": "int32"
        },
        "skipped": {
          "$ref": "#/definitions/ValidationSkippedCounts",
          "description": "Items skipped before validation."
        },
        "estimatedMaxDataTokens": {
          "description": "Maximum Data Tokens this batch may spend. Actual spend can be lower because unknown/error results are free.",
          "type": "integer",
          "format": "int32"
        },
        "dataTokenBalance": {
          "description": "Current Data Token balance after the batch has been queued.",
          "type": "integer",
          "format": "int64"
        }
      },
      "xml": {
        "name": "Api2ValidationSubmitResponse"
      },
      "type": "object"
    },
    "Whitelabel": {
      "description": "Whitelabel object represents a result/response for whitelabel resource. Whitelabel is a branding configuration\r\ncontrolling the visual appearance and identity of the platform. Whitelabel includes custom colors, logos, and domain\r\nconfigurations for client-facing interfaces, enabling agencies to deliver fully branded experiences to their customers.",
      "properties": {
        "color": {
          "description": "Primary color theme for whitelabel branding customization; supports color codes or color names with maximum 128\r\ncharacters.",
          "type": "string"
        },
        "customDomain": {
          "description": "Custom domain name for whitelabel branding; allows organizations to use their own domain instead of the default platform\r\ndomain with maximum 64 characters.",
          "type": "string"
        },
        "logoImageUrl": {
          "description": "URL to the logo image for whitelabel branding customization; displayed in the application interface with maximum 512\r\ncharacters for the URL path.",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2Whitelabel"
      },
      "type": "object"
    },
    "WhitelabelUpdate": {
      "description": "WhitelabelUpdate object is used for updating an existing whitelabel resource. Whitelabel is a branding configuration\r\ncontrolling the visual appearance and identity of the platform. Whitelabel includes custom colors, logos, and domain\r\nconfigurations for client-facing interfaces, enabling agencies to deliver fully branded experiences to their customers.",
      "properties": {
        "color": {
          "description": "Primary color theme for whitelabel branding customization; supports color codes or color names with maximum 128\r\ncharacters.",
          "type": "string"
        },
        "customDomain": {
          "description": "Custom domain name for whitelabel branding; allows organizations to use their own domain instead of the default platform\r\ndomain with maximum 64 characters.",
          "type": "string"
        },
        "logoImageUrl": {
          "description": "URL to the logo image for whitelabel branding customization; displayed in the application interface with maximum 512\r\ncharacters for the URL path.",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2WhitelabelUpdate"
      },
      "type": "object"
    },
    "Workspace": {
      "description": "Workspace object represents a result/response for workspace resource. Workspace is a sub-organization allowing\r\nagencies to manage multiple client accounts within a single parent organization. Workspace has its own users, campaigns,\r\nprospects, and API key for isolated data management, providing complete separation between different client accounts.",
      "properties": {
        "workspaceId": {
          "description": "Unique identifier for the workspace (sub-organization) within the agency.",
          "type": "integer",
          "format": "int32"
        },
        "createdAt": {
          "description": "Timestamp when the workspace was created in the system.",
          "type": "string",
          "format": "date-time"
        },
        "title": {
          "description": "Display name of the workspace; maximum 256 characters.",
          "type": "string"
        },
        "apiKey": {
          "description": "API key for authenticating requests made on behalf of this workspace, represented as a GUID.",
          "example": "00000000-0000-0000-0000-000000000000",
          "type": "string",
          "format": "uuid"
        }
      },
      "xml": {
        "name": "Api2Workspace"
      },
      "type": "object"
    },
    "WorkspaceCreate": {
      "description": "WorkspaceCreate object is used for creating a new workspace resource. Workspace is a sub-organization allowing agencies to\r\nmanage multiple client accounts within a single parent organization. Workspace has its own users, campaigns, prospects,\r\nand API key for isolated data management, providing complete separation between different client accounts.",
      "required": [
        "title"
      ],
      "properties": {
        "title": {
          "description": "Display name of the workspace; maximum 256 characters.",
          "type": "string",
          "maxLength": 256,
          "minLength": 0
        }
      },
      "xml": {
        "name": "Api2WorkspaceCreate"
      },
      "type": "object"
    },
    "WorkspaceCreditAllocation": {
      "description": "WorkspaceCreditAllocation object represents one sending credit allocation from the main account to a workspace.\r\nAllocation fields are those recorded when the allocation was created; balance fields are always current.",
      "properties": {
        "allocationId": {
          "description": "Unique identifier of the credit allocation.",
          "type": "integer",
          "format": "int32"
        },
        "workspaceId": {
          "description": "Identifier of the workspace the credits were allocated to.",
          "type": "integer",
          "format": "int32"
        },
        "amount": {
          "description": "Number of sending credits moved from the main account to the workspace.",
          "type": "integer",
          "format": "int32"
        },
        "note": {
          "description": "Free-text note recorded with the allocation; when the request omitted it, the default 'Added from main account'\r\nis recorded and returned.",
          "type": "string"
        },
        "externalReference": {
          "description": "Idempotency key the allocation was created with, or null when none was provided.",
          "type": "string"
        },
        "status": {
          "description": "Allocation state: 'pending' while the credit move is in flight, 'completed' when both ledger legs succeeded,\r\n'failed' when the move could not be completed.",
          "type": "string"
        },
        "balance": {
          "description": "Current sending credit balance of the workspace, read after the allocation.",
          "type": "integer",
          "format": "int32"
        },
        "mainAccountBalance": {
          "description": "Current sending credit balance of the main account, read after the allocation.",
          "type": "integer",
          "format": "int32"
        },
        "createdAt": {
          "description": "Timestamp when the allocation was created.",
          "type": "string",
          "format": "date-time"
        }
      },
      "xml": {
        "name": "Api2WorkspaceCreditAllocation"
      },
      "type": "object"
    },
    "WorkspaceCreditAllocationCreate": {
      "description": "WorkspaceCreditAllocationCreate object is used for allocating sending credits from the main account to a workspace\r\nwith separate credits. The amount is debited from the main account balance and credited to the workspace balance.",
      "required": [
        "amount"
      ],
      "properties": {
        "amount": {
          "description": "Number of sending credits to move from the main account to the workspace; must be a positive integer.",
          "example": "5000",
          "type": "integer",
          "format": "int32",
          "maximum": 2147483647,
          "minimum": 1
        },
        "note": {
          "description": "Optional free-text note for the allocation; recorded in the credit ledger; maximum 256 characters.",
          "example": "Top-up from order #4821",
          "type": "string",
          "maxLength": 256
        },
        "externalReference": {
          "description": "Optional idempotency key, unique per main account; maximum 128 characters. Repeating a request with the same\r\nexternalReference returns the original allocation instead of moving credits again. Strongly recommended for\r\nautomated integrations that retry on timeout.",
          "example": "order-4821",
          "type": "string",
          "maxLength": 128
        }
      },
      "xml": {
        "name": "Api2WorkspaceCreditAllocationCreate"
      },
      "type": "object"
    },
    "WorkspaceCreditStatus": {
      "description": "WorkspaceCreditStatus object represents the sending credit balance of a workspace, with an explicit discriminator\r\nfor whether the workspace holds its own credits or shares the main account pool.",
      "properties": {
        "workspaceId": {
          "description": "Identifier of the workspace the balance belongs to.",
          "type": "integer",
          "format": "int32"
        },
        "creditMode": {
          "description": "Credit mode of the workspace: 'separate' when it holds its own balance, 'shared' when it draws from the main\r\naccount pool (optionally capped by a monthly allocation).",
          "type": "string"
        },
        "balance": {
          "description": "Effective available sending credits. For 'separate' mode this is the workspace's own balance; for 'shared' mode\r\nit is the remaining monthly allocation when auto-allocation is enabled, otherwise the main account balance.",
          "type": "integer",
          "format": "int32"
        },
        "mainAccountBalance": {
          "description": "Current sending credit balance of the main account. Populated only for main-account callers; null when a\r\nworkspace reads its own status.",
          "type": "integer",
          "format": "int32"
        }
      },
      "xml": {
        "name": "Api2WorkspaceCreditStatus"
      },
      "type": "object"
    },
    "WorkspacePage": {
      "description": "WorkspacePage object represents a paginated list of workspace resources with cursor-based pagination. Workspace is a\r\nsub-organization allowing agencies to manage multiple client accounts within a single parent organization. Workspace has\r\nits own users, campaigns, prospects, and API key for isolated data management, providing complete separation between\r\ndifferent client accounts.",
      "properties": {
        "items": {
          "description": "Array of items in the current page",
          "items": {
            "$ref": "#/definitions/Workspace"
          },
          "xml": {
            "name": "Api2Workspace",
            "wrapped": true
          },
          "type": "array"
        },
        "pagination": {
          "$ref": "#/definitions/PaginationInteger",
          "description": "Pagination metadata with typed primary key support"
        }
      },
      "xml": {
        "name": "Api2WorkspacePage"
      },
      "type": "object"
    },
    "WorkspaceUpdate": {
      "description": "WorkspaceUpdate object is used for updating an existing workspace resource. Workspace is a sub-organization allowing\r\nagencies to manage multiple client accounts within a single parent organization. Workspace has its own users, campaigns,\r\nprospects, and API key for isolated data management, providing complete separation between different client accounts.",
      "properties": {
        "title": {
          "description": "Display name of the workspace; maximum 256 characters.",
          "type": "string"
        }
      },
      "xml": {
        "name": "Api2WorkspaceUpdate"
      },
      "type": "object"
    }
  },
  "securityDefinitions": {
    "X-API-Key": {
      "type": "apiKey",
      "description": "API Key required in X-API-Key header for v2 endpoints",
      "name": "X-API-Key",
      "in": "header"
    }
  },
  "security": [
    {
      "X-API-Key": []
    }
  ],
  "tags": [
    {
      "name": "Account",
      "description": "Authenticated account context and balances"
    },
    {
      "name": "Blacklist",
      "description": "Email and domain blacklist (no-contact list)"
    },
    {
      "name": "Campaign",
      "description": "Managing email campaigns, prospects, and campaign operations"
    },
    {
      "name": "Clientspace",
      "description": "Managing clientspace accounts and configurations. Note: the web app now labels clientspaces as 'Subaccounts'; the API keeps the clientspace naming for backward compatibility - they are the same thing."
    },
    {
      "name": "Followup",
      "description": "Managing email followups"
    },
    {
      "name": "List",
      "description": "Managing lists of prospects and subscribers"
    },
    {
      "name": "Message",
      "description": "Managing messages"
    },
    {
      "name": "Prospect",
      "description": "Managing individual prospects and their data"
    },
    {
      "name": "Sender",
      "description": "Managing sender accounts and configurations"
    },
    {
      "name": "Sequence",
      "description": "Managing email sequences and their followups"
    },
    {
      "name": "Tags",
      "description": "Managing tags for prospect organization"
    },
    {
      "name": "User",
      "description": "Managing user operation"
    },
    {
      "name": "Validation",
      "description": "Validate prospect emails using Data Tokens"
    },
    {
      "name": "Whitelabel",
      "description": "Managing whitelabel Operation"
    },
    {
      "name": "Workspace",
      "description": "Managing workspace accounts and configurations"
    }
  ]
}