{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/popp/main/json-schema/popp-list-campaigns-response-schema.json",
  "title": "List Campaigns Response",
  "description": "Response for listing campaigns",
  "x-generated": "2026-10-14",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/popp-api-openapi.yml#/components/schemas/ListCampaignsResponse",
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "title": "Campaign",
        "description": "Schema for a campaign",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Unique identifier for the campaign"
          },
          "organizationId": {
            "type": "string",
            "format": "uuid",
            "description": "Identifier of the organization that owns the campaign"
          },
          "type": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "APPLICANT_OUTREACH",
              "NEW_CANDIDATE_OUTREACH",
              "ENGAGEMENT_OUTREACH"
            ],
            "description": "Type of the campaign"
          },
          "channel": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "SMS",
              "WHATSAPP",
              "WEB_CHAT",
              "WEB_CHAT_VIA_EMAIL"
            ],
            "description": "Channel through which the campaign is conducted"
          },
          "emailChannelFallbackEnabled": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Campaign-level email fallback setting. null means the campaign inherits the organization-level setting; true or false is an explicit campaign override."
          },
          "closingMethod": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "CUSTOM",
              "CALENDAR_MEETING_INTEGRATION"
            ],
            "description": "Closing method for the campaign"
          },
          "templateId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the template used for the campaign"
          },
          "campaignTitle": {
            "type": [
              "string",
              "null"
            ],
            "description": "Title of the campaign"
          },
          "campaignDescription": {
            "type": [
              "string",
              "null"
            ],
            "description": "Description of the job for the campaign"
          },
          "additionalContext": {
            "type": [
              "string",
              "null"
            ],
            "description": "Additional context or notes for the campaign"
          },
          "externalId": {
            "type": [
              "string",
              "null"
            ],
            "description": "External identifier for the campaign"
          },
          "isWorkflowManaged": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "True when the campaign is managed by Workflow Builder. Mutation endpoints (POST /v1/conversations, POST /v1/conversations/bulk, POST /v1/conversations/scheduling, PATCH /v1/campaigns/{id}, POST /v1/campaigns/{id}/stop) reject such campaigns with 400 — start work via POST /v1/workflows/{workflowId}/runs instead. See the Workflow Builder guide."
          },
          "workflowId": {
            "type": [
              "string",
              "null"
            ],
            "description": "Identifier of the workflow that owns this campaign. Null when the campaign is not workflow-managed."
          },
          "workflowVersionId": {
            "type": [
              "string",
              "null"
            ],
            "description": "Identifier of the workflow version that owns this campaign. Null when the campaign is not workflow-managed."
          },
          "workflowNodeId": {
            "type": [
              "string",
              "null"
            ],
            "description": "Identifier of the workflow node that owns this campaign. Null when the campaign is not workflow-managed."
          },
          "conversationTimeout": {
            "type": [
              "number",
              "null"
            ],
            "description": "Time in hours to automatically close conversations"
          },
          "owner": {
            "type": [
              "string",
              "null"
            ],
            "format": "email",
            "description": "Owner's email address"
          },
          "rejectionMessage": {
            "type": [
              "string",
              "null"
            ],
            "description": "Message sent upon rejection"
          },
          "closingMessage": {
            "type": [
              "string",
              "null"
            ],
            "description": "Message sent when the campaign is closed"
          },
          "customRequest": {
            "type": [
              "string",
              "null"
            ],
            "description": "Custom request for the campaign"
          },
          "campaignStatus": {
            "type": "string",
            "enum": [
              "ARCHIVED",
              "DISCONNECTED",
              "DRAFT",
              "FINISHED_GENERATING",
              "FINISHED_SENDING",
              "GENERATING_MESSAGES",
              "LIVE",
              "PAUSED",
              "PROCESSING",
              "SCHEDULED",
              "SENDING_MESSAGES"
            ],
            "description": "Current status of the campaign"
          },
          "needsReview": {
            "type": "boolean",
            "description": "Indicates if the campaign needs review"
          },
          "disableNudging": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "When true, automatic follow-up messages (nudges) are disabled for all conversations in this campaign"
          },
          "nudgeSettings": {
            "type": [
              "array",
              "null"
            ],
            "description": "Custom nudge timing configuration. Each entry represents one follow-up nudge. Null when using default behavior (3 nudges at 24-hour intervals). Note: for WhatsApp campaigns, nudges are only sent after the candidate replies.",
            "items": {
              "type": "object",
              "properties": {
                "delayHours": {
                  "type": "integer",
                  "description": "Hours to wait since the previous message before sending this nudge.",
                  "minimum": 1
                }
              }
            }
          },
          "jobDescriptionParsed": {
            "type": [
              "object",
              "null"
            ],
            "description": "Parsed job description details",
            "required": [
              "employerName",
              "jobTitle",
              "summaryOfRole"
            ],
            "additionalProperties": false,
            "properties": {
              "employerName": {
                "type": "string",
                "description": "Name of the employer"
              },
              "jobTitle": {
                "type": "string",
                "description": "Title of the job"
              },
              "summaryOfRole": {
                "type": "string",
                "description": "Summary of the role"
              }
            }
          },
          "agent": {
            "type": [
              "object",
              "null"
            ],
            "description": "Agent managing the campaign",
            "required": [
              "id",
              "agentName"
            ],
            "additionalProperties": false,
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "description": "ID of the agent"
              },
              "agentName": {
                "type": "string",
                "description": "Name of the agent"
              },
              "agentTone": {
                "type": [
                  "string",
                  "null"
                ],
                "enum": [
                  "CASUAL",
                  "PROFESSIONAL",
                  "NEUTRAL",
                  "FRIENDLY",
                  "MOTIVATIONAL",
                  "CUSTOM",
                  "ENCOURAGING"
                ],
                "description": "Tone used by the agent"
              }
            }
          },
          "questions": {
            "type": [
              "array",
              "null"
            ],
            "description": "List of screening questions for the campaign",
            "items": {
              "type": "object",
              "oneOf": [
                {
                  "properties": {
                    "questionType": {
                      "type": "string",
                      "enum": [
                        "TEXT"
                      ],
                      "description": "Type of the question"
                    },
                    "isMandatory": {
                      "type": [
                        "boolean",
                        "null"
                      ],
                      "description": "Indicates if the question is mandatory"
                    },
                    "content": {
                      "type": "string",
                      "description": "Content of the question"
                    },
                    "documentTypes": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "description": "Deprecated free-text list of document types required. Null on TEXT questions and on DOCUMENT questions that use `documentItems` instead.",
                      "items": {
                        "type": "string"
                      }
                    },
                    "documentItems": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "description": "Typed references to DocumentType records. Null on TEXT questions and on DOCUMENT questions that use the deprecated `documentTypes` field instead.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "documentTypeId": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "documentTypeName": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        }
                      }
                    },
                    "hasPreferredAnswer": {
                      "type": [
                        "boolean",
                        "null"
                      ],
                      "description": "Whether this question has preferred answer criteria"
                    },
                    "preferredAnswerRequirements": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "description": "List of requirements the preferred answer should meet",
                      "items": {
                        "type": "string"
                      }
                    },
                    "preferredAnswerText": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Example of a preferred answer text"
                    }
                  },
                  "required": [
                    "questionType",
                    "isMandatory",
                    "content"
                  ],
                  "additionalProperties": false
                },
                {
                  "properties": {
                    "questionType": {
                      "type": "string",
                      "enum": [
                        "DOCUMENT"
                      ],
                      "description": "Type of the question"
                    },
                    "isMandatory": {
                      "type": [
                        "boolean",
                        "null"
                      ],
                      "description": "Indicates if the question is mandatory"
                    },
                    "content": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Content of the question"
                    },
                    "documentTypes": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "description": "Deprecated free-text list of document types required. Null when the question uses `documentItems` instead.",
                      "items": {
                        "type": "string"
                      }
                    },
                    "documentItems": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "description": "Typed references to DocumentType records. Null when the question uses the deprecated `documentTypes` field instead.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "documentTypeId": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "documentTypeName": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "questionType",
                    "isMandatory"
                  ],
                  "additionalProperties": false
                }
              ]
            }
          },
          "language": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "en_ca",
              "en_gb",
              "en_us",
              "de",
              "es",
              "fr",
              "it",
              "nl",
              "nl_be",
              "pt",
              "pt_br",
              "zh_hk",
              "ar",
              "ja",
              "ko",
              "ru",
              "pl",
              "tr",
              "hu",
              "sv",
              "no",
              "da"
            ],
            "description": "Language the campaign operates in: en_ca (Canadian English), en_gb (British English), en_us (American English), de (German), es (Spanish), fr (French), it (Italian), nl (Dutch), nl_be (Flemish), pt (Portuguese), pt_br (Brazilian Portuguese), zh_hk (Chinese), ar (Arabic), ja (Japanese), ko (Korean), ru (Russian), pl (Polish), tr (Turkish), hu (Hungarian), sv (Swedish), no (Norwegian), da (Danish)."
          }
        },
        "required": [
          "id",
          "organizationId",
          "status",
          "needsReview"
        ],
        "additionalProperties": false
      }
    },
    "nextToken": {
      "type": [
        "string",
        "null"
      ],
      "description": "Token for retrieving the next page of results"
    }
  },
  "required": [
    "data"
  ],
  "additionalProperties": false
}