openapi: 3.2.0 info: title: Popp Campaigns API description: Popp API documentation version: '1' servers: - url: https://api.joinpopp.com description: Development server security: - popp_api_key: [] organization_id: [] tags: - name: Campaigns paths: /v1/campaigns: post: summary: Create Campaign description: Creates a campaign in Popp application. operationId: create-campaign parameters: [] tags: - Campaigns requestBody: description: Create Campaign Request required: true content: application/json: schema: $ref: '#/components/schemas/CreateCampaignRequest' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/CreateCampaignResponse' headers: {} '400': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '401': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '403': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '404': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '500': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} get: summary: List campaigns description: List all campaigns in Popp application operationId: list-campaigns parameters: - name: limit in: query description: The limit parameter required: false schema: $ref: '#/components/schemas/limit' - name: nextToken in: query description: The next token parameter required: false schema: $ref: '#/components/schemas/nextToken' - name: campaignTitle in: query description: Filter campaigns by title required: false schema: $ref: '#/components/schemas/campaignTitle' - name: campaignStatus in: query description: Filter campaigns by status (comma-separated for multiple values) required: false schema: $ref: '#/components/schemas/campaignStatus' - name: campaignType in: query description: Filter campaigns by type required: false schema: $ref: '#/components/schemas/campaignType-3b31177b-4f80-4990-b9e7-b07ee5ae2ade' - name: channel in: query description: Filter campaigns by communication channel required: false schema: $ref: '#/components/schemas/channel-d7b2fd6e-9a72-4b90-adf5-a8c00a58fa0d' - name: needsReview in: query description: Filter campaigns by review status required: false schema: $ref: '#/components/schemas/needsReview' - name: closingMethod in: query description: Filter campaigns by closing method required: false schema: $ref: '#/components/schemas/closingMethod' - name: externalId in: query description: Filter campaigns by external ID required: false schema: $ref: '#/components/schemas/externalId' tags: - Campaigns responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/ListCampaignsResponse' headers: {} '400': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '401': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} /v1/campaigns/{campaignId}: get: summary: Get campaign description: Get a campaign operationId: get-campaign parameters: - name: campaignId in: path description: The ID of the campaign to get required: true schema: $ref: '#/components/schemas/campaignId' tags: - Campaigns responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Campaign' headers: {} '400': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '401': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '404': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} put: summary: Update Campaign description: Updates an existing campaign. All fields are optional but at least one must be provided. Questions cannot be updated after creation. Setting campaignStatus to ARCHIVED will stop the campaign. Setting campaignStatus to LIVE will activate a DRAFT campaign. operationId: update-campaign parameters: - name: campaignId in: path description: The ID of the campaign to update required: true schema: $ref: '#/components/schemas/campaignId' tags: - Campaigns requestBody: description: Update Campaign Request required: false content: application/json: schema: $ref: '#/components/schemas/UpdateCampaignRequest' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/UpdateCampaignResponse' headers: {} '400': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '403': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '404': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '409': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '500': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} /v1/campaigns/{campaignId}/stop: post: summary: Stop Campaign description: Stops a campaign and optionally sends a cancellation message to candidates operationId: stop-campaign parameters: - name: campaignId in: path description: The ID of the campaign to stop required: true schema: $ref: '#/components/schemas/campaignId' tags: - Campaigns requestBody: description: Stop Campaign Request required: false content: application/json: schema: $ref: '#/components/schemas/StopCampaignRequest' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/StopCampaignResponse' headers: {} '400': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '403': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '404': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '409': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '500': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} /v1/generate-preferred-answer-requirements: post: summary: Generate Preferred Answer Requirements description: Turns a campaign question and its preferred answer into a list of scoring statements. The returned list can be posted straight back as that question's preferredAnswerRequirements on create or update campaign. Stateless - does not create or modify any data. operationId: generate-preferred-answer-requirements parameters: [] tags: - Campaigns requestBody: description: The question and the preferred answer to derive scoring statements from required: true content: application/json: schema: $ref: '#/components/schemas/GeneratePreferredAnswerRequirementsInput' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/GeneratePreferredAnswerRequirementsResponse' headers: {} '400': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '401': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '500': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} /v1/generate-questions: post: summary: Generate Questions description: Generates interview questions from a job description using Popp agent operationId: generate-questions parameters: [] tags: - Campaigns requestBody: description: Generate screening questions for a campaign from a job description required: true content: application/json: schema: $ref: '#/components/schemas/GenerateQuestionsInput' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/GenerateQuestionsResponse' headers: {} '400': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '401': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} '500': description: '' content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' headers: {} components: schemas: GenerateQuestionsResponse: type: object properties: closedQuestions: type: array title: Closed Questions description: List of closed-ended questions generated from the job description. items: type: object properties: content: type: string description: The question text. required: - content openEndedQuestions: type: array title: Open Ended Questions description: List of open-ended questions generated from the job description. items: type: object properties: content: type: string description: The question text. preferredAnswer: type: string description: The preferred answer for this question. required: - content - preferredAnswer required: - closedQuestions - openEndedQuestions additionalProperties: false GeneratePreferredAnswerRequirementsResponse: type: object required: - preferredAnswerRequirements properties: preferredAnswerRequirements: type: array description: Scoring statements derived from the preferred answer. Pass this list back as the question's preferredAnswerRequirements when creating or updating a campaign. items: type: string additionalProperties: false Campaign: 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 campaignType-3b31177b-4f80-4990-b9e7-b07ee5ae2ade: type: string enum: - APPLICANT_OUTREACH - ENGAGEMENT_OUTREACH - NEW_CANDIDATE_OUTREACH limit: type: integer GeneratePreferredAnswerRequirementsInput: type: object required: - content - preferredAnswerText properties: content: type: string minLength: 1 description: The question text, as it is asked of the candidate. preferredAnswerText: type: string minLength: 1 description: A free-text description of what a strong answer to the question looks like. additionalProperties: false externalId: type: string closingMethod: type: string enum: - CUSTOM - CALENDAR_MEETING_INTEGRATION campaignTitle: type: string StopCampaignRequest: description: Request to stop a campaign type: object properties: sendCancellationMessage: type: boolean description: Whether to send a cancellation message to candidates default: false cancellationMessage: type: string description: The cancellation message to send to candidates. Required when sendCancellationMessage is true. minLength: 1 maxLength: 1000 availabilityOutreachCancellationMessage: type: string description: Optional cancellation message sent to interviewer/availability-outreach conversations when a scheduling campaign stop cascades to its linked availability-outreach campaign. A system default is used if omitted. minLength: 1 maxLength: 1000 additionalProperties: false needsReview: type: string enum: - 'true' - 'false' campaignStatus: type: string enum: - ARCHIVED - DISCONNECTED - DRAFT - FINISHED_GENERATING - FINISHED_SENDING - GENERATING_MESSAGES - LIVE - PAUSED - PROCESSING - SCHEDULED - SENDING_MESSAGES CreateCampaignResponse: title: Create Campaign Response description: Response for creating a new campaign type: object additionalProperties: false 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 UpdateCampaignRequest: type: object properties: campaignTitle: type: string minLength: 1 description: Campaign title campaignDescription: type: string minLength: 1 description: Campaign description campaignStatus: type: string enum: - ARCHIVED - LIVE description: Campaign status. Setting to ARCHIVED will stop the campaign. Setting to LIVE will activate a DRAFT campaign. Once archived, status cannot be changed. language: type: string 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). Changing this changes which message templates follow-up messages resolve to, so it must match a language the organization has templates for.' additionalContext: type: string minLength: 10 description: Additional context for the campaign rejectionMessage: type: string minLength: 1 description: Rejection message closingMessage: type: string minLength: 1 description: Closing message customMessage: type: string minLength: 1 description: Custom message openingMessageTemplateId: type: string minLength: 1 description: Opening message template ID channel: type: string enum: - SMS - WHATSAPP - EMAIL description: Communication channel emailChannelFallbackEnabled: type: - boolean - 'null' description: Controls falling back to email when an SMS or WhatsApp message cannot be delivered (invalid or missing phone number). Omit to leave the current value unchanged. Set true or false to override the organization-level setting for this campaign in either direction. Set null to clear a campaign override so the campaign inherits the organization-level setting again, including future changes to it. Has no effect on EMAIL channel campaigns. Only affects conversations created after the change. conversationTimeout: type: integer minimum: 24 description: Conversation timeout in hours minProperties: 1 additionalProperties: false ListCampaignsResponse: title: List Campaigns Response description: Response for listing campaigns 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 UpdateCampaignResponse: title: Update Campaign Response description: Response for updating a campaign type: object additionalProperties: false 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 nextToken: type: string CreateCampaignRequest: description: Request to create a new campaign type: object properties: campaignType: title: Campaign Type description: The type of campaign to create type: string enum: - APPLICANT_OUTREACH - NEW_CANDIDATE_OUTREACH - ENGAGEMENT_OUTREACH - SCHEDULING closingMethod: title: Closing Method description: How the campaign conversation should be closed. Defaults to CALENDAR_MEETING_INTEGRATION for SCHEDULING campaigns. CUSTOM requires `customMessage`; CALENDAR_MEETING_INTEGRATION requires `calendarMeetingTemplateId`. type: string enum: - CUSTOM - CALENDAR_MEETING_INTEGRATION channel: title: Channel description: Communication channel used for the campaign type: string enum: - SMS - WHATSAPP - EMAIL emailChannelFallbackEnabled: type: boolean description: 'Controls falling back to email when an SMS or WhatsApp message cannot be delivered (invalid or missing phone number). When omitted, the campaign inherits the organization-level email fallback setting, including future changes to it. An explicit value overrides the organization setting in either direction: true enables fallback for this campaign even if the organization has it disabled, false disables it even if the organization has it enabled. Not applicable to EMAIL channel campaigns.' campaignTitle: type: string description: Title of the campaign campaignDescription: type: string description: Detailed description of the campaign format: textarea closingMessage: type: string description: Message sent when the candidate is not interested. rejectionMessage: type: string description: Message sent when a candidate is rejected (fails mandatory/knockout questions). customMessage: type: string description: Message sent to the candidate when they successfully complete the conversation. Required when closingMethod is CUSTOM. company: type: string description: Company name for the role. location: type: string description: Location of the role. contractType: type: string description: Contract type for the role (e.g. Permanent, Contract, Temporary). Only used for APPLICANT_OUTREACH and NEW_CANDIDATE_OUTREACH campaigns. When provided, it overrides the contract type Popp would otherwise infer from campaignDescription. questions: type: array description: List of screening questions included in the campaign. Not allowed for SCHEDULING campaigns. minItems: 1 items: type: object oneOf: - title: Text Question description: A text-based screening question type: object properties: questionType: type: string enum: - TEXT isMandatory: type: boolean description: When true, failing this question will reject the candidate (knockout question) content: type: string description: The question text preferredAnswerRequirements: type: array items: type: string minItems: 1 description: List of preferred answer criteria for scoring preferredAnswerText: type: string description: Description of the preferred answer required: - questionType - isMandatory - content additionalProperties: false - title: Document Request description: A document upload request type: object properties: questionType: type: string enum: - DOCUMENT isMandatory: type: boolean description: When true, the document is required to proceed documentTypes: type: array items: type: string description: Deprecated free-text list of accepted document types (e.g. 'CV', 'Passport'). Provide `documentItems` instead to reference DocumentType records by id. A question must carry either `documentTypes` or `documentItems`, never both. minItems: 1 documentItems: type: array items: type: object properties: documentTypeId: type: string format: uuid description: Id of a DocumentType in the caller's organization (created via `POST /v1/document-types`). Must not be archived. required: - documentTypeId additionalProperties: false description: Typed references to DocumentType records. The server resolves each id to its canonical name and rejects unknown / archived ids with 400. A question must carry either `documentTypes` or `documentItems`, never both. minItems: 1 required: - questionType - isMandatory additionalProperties: false additionalContext: type: string description: Additional context or instructions for the AI agent (minimum 10 characters) format: textarea conversationTimeout: type: integer minimum: 24 description: Timeout for conversations in hours (minimum 24 hours). Defaults to 48 hours. owner: type: string format: email description: Email address of the campaign owner. Must be a user in the organization. campaignStatus: type: string enum: - LIVE - DRAFT description: Status of the campaign. DRAFT creates the campaign without sending. Defaults to LIVE. default: LIVE openingMessageTemplateId: type: string description: ID of the opening message template. Must match the specified channel and campaignType. Mutually exclusive with customTemplatedMessage. format: uuid customTemplatedMessage: type: string description: Custom opening message template text (minimum 10 characters). SMS and Email channels only. Mutually exclusive with openingMessageTemplateId. Must contain the word STOP (uppercase) for opt-out compliance. Supports {{SCREAMING_SNAKE_CASE}} placeholders, filled in per candidate; which ones are available depends on campaignType, so see "Personalising the Opening Message" in the Campaigns guide for the table. {{CANDIDATE_FIRST_NAME}}, {{CANDIDATE_LAST_NAME}}, {{AGENT_NAME}} and {{ORGANIZATION_NAME}} work on every campaign type; SCHEDULING campaigns must also include {{MEETING_URL}}. An unrecognised name returns 400 "Unknown placeholder found"; a valid name that campaignType cannot fill returns 400 "Missing value for template variable". customTemplatedSubjectLine: type: string description: Subject line for Email campaigns using customTemplatedMessage. Required when using customTemplatedMessage with Email channel. Maximum 200 characters. Takes the same placeholder names as customTemplatedMessage; an unrecognised name returns 400 "Invalid placeholder in subject line". Note that only the name is validated here, not whether campaignType can fill it. maxLength: 200 agentName: type: string description: AI agent name (case-insensitive, Unicode letters only, maximum 3 words). There is no agentId field — an agent cannot be referenced by ID; supply agentName together with agentTone instead. If the pair does not match your organization's default agent, a new agent is created with this name and tone. agentTone: type: string description: Tone used by the AI agent. Must be provided together with agentName. enum: - CASUAL - ENCOURAGING - FRIENDLY - MOTIVATIONAL - NEUTRAL - PROFESSIONAL externalId: type: string title: External ID description: Your unique identifier for the campaign in your external system. calendarMeetingTemplateId: type: string title: Calendar Meeting Template ID description: ID of the calendar meeting template. Used when closingMethod is CALENDAR_MEETING_INTEGRATION. format: uuid disableNudging: type: boolean description: When true, automatic follow-up messages (nudges) will be disabled for all conversations in this campaign. Defaults to false. Cannot be used together with a non-empty nudgeSettings array. default: false nudgeSettings: type: - array - 'null' description: 'Custom nudge timing configuration. Each entry represents one follow-up nudge with a delayHours field specifying the wait time since the previous message. The array length determines the total number of nudges. An empty array disables nudging. A non-empty array cannot be used together with disableNudging: true. When omitted, defaults to 3 nudges at 24-hour intervals. Note: for WhatsApp campaigns, nudges are only sent after the candidate replies.' maxItems: 10 example: - delayHours: 24 - delayHours: 48 items: type: object properties: delayHours: type: integer description: Hours to wait since the previous message before sending this nudge. minimum: 1 required: - delayHours language: type: string 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). When omitted, it is derived from the language of openingMessageTemplateId, then from the organization''s language when it supports only one, and finally defaults to en_us. WHATSAPP campaigns are rejected with a 400 when the language has no approved WhatsApp templates for the organization, because WhatsApp follow-up messages require a pre-approved template in the campaign language; set disableNudging to true to opt out of follow-ups and skip that check.' default: en_us required: - campaignType - closingMethod - channel - campaignTitle - campaignDescription - closingMessage - rejectionMessage - agentName - agentTone ErrorResponse: type: object StopCampaignResponse: description: Response from stopping a campaign type: object properties: campaignId: type: string description: The ID of the stopped campaign status: type: string description: The new status of the campaign enum: - ARCHIVED required: - campaignId - status channel-d7b2fd6e-9a72-4b90-adf5-a8c00a58fa0d: type: string enum: - SMS - WEB_CHAT - WEB_CHAT_VIA_EMAIL - WHATSAPP campaignId: type: string GenerateQuestionsInput: type: object properties: jobDescription: type: string title: Job Description description: The job description text to generate questions from. minLength: 1 required: - jobDescription additionalProperties: false securitySchemes: popp_api_key: description: Your Popp API key for authentication type: apiKey name: x-api-key in: header organization_id: description: Your organization's unique identifier type: apiKey name: x-organization-id in: header x-provenance: method: searched source: https://docs.joinpopp.com/reference harvested: '2026-10-14' tool: harvest-readme-openapi.py note: Assembled verbatim from the OpenAPI definition ReadMe embeds in each operation page of the provider's developer portal; paths and components merged by API title, nothing authored. assembled_from: - https://docs.joinpopp.com/reference/add-candidates-to-list-by-external-id.md - https://docs.joinpopp.com/reference/add-candidates-to-list.md - https://docs.joinpopp.com/reference/archive-analysis.md - https://docs.joinpopp.com/reference/archive-document-type.md - https://docs.joinpopp.com/reference/archive-workflow-by-external-id.md - https://docs.joinpopp.com/reference/archive-workflow.md - https://docs.joinpopp.com/reference/bulk-create-conversations.md - https://docs.joinpopp.com/reference/cancel-booking.md - https://docs.joinpopp.com/reference/cancel-workflow-run.md - https://docs.joinpopp.com/reference/create-analysis-candidate.md - https://docs.joinpopp.com/reference/create-analysis.md - https://docs.joinpopp.com/reference/create-campaign.md - https://docs.joinpopp.com/reference/create-candidate-list.md - https://docs.joinpopp.com/reference/create-candidate-note-by-external-id.md - https://docs.joinpopp.com/reference/create-candidate-note.md - https://docs.joinpopp.com/reference/create-candidate.md - https://docs.joinpopp.com/reference/create-conversation.md - https://docs.joinpopp.com/reference/create-custom-field.md - https://docs.joinpopp.com/reference/create-document-credential.md - https://docs.joinpopp.com/reference/create-document-type.md - https://docs.joinpopp.com/reference/create-meeting-template.md - https://docs.joinpopp.com/reference/create-organization-config.md - https://docs.joinpopp.com/reference/create-scheduling-conversation.md - https://docs.joinpopp.com/reference/create-user.md - https://docs.joinpopp.com/reference/create-webhook.md - https://docs.joinpopp.com/reference/create-workflow.md - https://docs.joinpopp.com/reference/deactivate-user-by-email.md - https://docs.joinpopp.com/reference/deactivate-user.md - https://docs.joinpopp.com/reference/delete-candidate-by-email.md - https://docs.joinpopp.com/reference/delete-candidate-by-external-id.md - https://docs.joinpopp.com/reference/delete-candidate-by-phone-number.md - https://docs.joinpopp.com/reference/delete-candidate-list-by-external-id.md - https://docs.joinpopp.com/reference/delete-candidate-list.md - https://docs.joinpopp.com/reference/delete-candidate-note.md - https://docs.joinpopp.com/reference/delete-candidate.md - https://docs.joinpopp.com/reference/delete-custom-field.md - https://docs.joinpopp.com/reference/delete-document-credential.md - https://docs.joinpopp.com/reference/delete-document-type.md - https://docs.joinpopp.com/reference/delete-meeting-template.md - https://docs.joinpopp.com/reference/delete-tag.md - https://docs.joinpopp.com/reference/delete-user-by-email.md - https://docs.joinpopp.com/reference/delete-user.md - https://docs.joinpopp.com/reference/delete-webhook.md - https://docs.joinpopp.com/reference/download-media.md - https://docs.joinpopp.com/reference/generate-preferred-answer-requirements.md - https://docs.joinpopp.com/reference/generate-questions.md - https://docs.joinpopp.com/reference/generate-requirements.md - https://docs.joinpopp.com/reference/get-analysis.md - https://docs.joinpopp.com/reference/get-booking.md - https://docs.joinpopp.com/reference/get-campaign.md - https://docs.joinpopp.com/reference/get-candidate-by-external-id.md - https://docs.joinpopp.com/reference/get-candidate-list-by-external-id.md - https://docs.joinpopp.com/reference/get-candidate-list.md - https://docs.joinpopp.com/reference/get-candidate-profile-by-external-id.md - https://docs.joinpopp.com/reference/get-candidate.md - https://docs.joinpopp.com/reference/get-conversation.md - https://docs.joinpopp.com/reference/get-custom-field.md - https://docs.joinpopp.com/reference/get-document-media.md - https://docs.joinpopp.com/reference/get-document-type.md - https://docs.joinpopp.com/reference/get-document.md - https://docs.joinpopp.com/reference/get-meeting-template.md - https://docs.joinpopp.com/reference/get-organization-config-by-external-id.md - https://docs.joinpopp.com/reference/get-organization-config.md - https://docs.joinpopp.com/reference/get-organization-details.md - https://docs.joinpopp.com/reference/get-user-by-email.md - https://docs.joinpopp.com/reference/get-user-calendar.md - https://docs.joinpopp.com/reference/get-user.md - https://docs.joinpopp.com/reference/get-workflow-analysis-application.md - https://docs.joinpopp.com/reference/get-workflow-analysis.md - https://docs.joinpopp.com/reference/get-workflow-by-external-id.md - https://docs.joinpopp.com/reference/get-workflow-run.md - https://docs.joinpopp.com/reference/get-workflow.md - https://docs.joinpopp.com/reference/hand-conversation-to-agent.md - https://docs.joinpopp.com/reference/invite-calendar-contact.md - https://docs.joinpopp.com/reference/list-agents.md - https://docs.joinpopp.com/reference/list-analyses.md - https://docs.joinpopp.com/reference/list-ats-job-stages.md - https://docs.joinpopp.com/reference/list-ats-jobs.md - https://docs.joinpopp.com/reference/list-ats-rejection-reasons.md - https://docs.joinpopp.com/reference/list-bookings.md - https://docs.joinpopp.com/reference/list-campaigns.md - https://docs.joinpopp.com/reference/list-candidate-lists.md - https://docs.joinpopp.com/reference/list-candidate-notes-by-external-id.md - https://docs.joinpopp.com/reference/list-candidate-notes.md - https://docs.joinpopp.com/reference/list-conversation-documents.md - https://docs.joinpopp.com/reference/list-conversation-messages.md - https://docs.joinpopp.com/reference/list-conversations.md - https://docs.joinpopp.com/reference/list-custom-fields.md - https://docs.joinpopp.com/reference/list-document-credentials.md - https://docs.joinpopp.com/reference/list-document-types.md - https://docs.joinpopp.com/reference/list-meeting-templates.md - https://docs.joinpopp.com/reference/list-organization-users.md - https://docs.joinpopp.com/reference/list-organizations.md - https://docs.joinpopp.com/reference/list-tags.md - https://docs.joinpopp.com/reference/list-templates.md - https://docs.joinpopp.com/reference/list-user-calendars.md - https://docs.joinpopp.com/reference/list-users.md - https://docs.joinpopp.com/reference/list-webhook-events.md - https://docs.joinpopp.com/reference/list-webhooks.md - https://docs.joinpopp.com/reference/list-workflow-analysis-application-history.md - https://docs.joinpopp.com/reference/list-workflow-analysis-applications.md - https://docs.joinpopp.com/reference/list-workflow-runs.md - https://docs.joinpopp.com/reference/list-workflows.md - https://docs.joinpopp.com/reference/parse-availability.md - https://docs.joinpopp.com/reference/pause-workflow-by-external-id.md - https://docs.joinpopp.com/reference/pause-workflow.md - https://docs.joinpopp.com/reference/process-document.md - https://docs.joinpopp.com/reference/publish-workflow-by-external-id.md - https://docs.joinpopp.com/reference/publish-workflow.md - https://docs.joinpopp.com/reference/reactivate-user-by-email.md - https://docs.joinpopp.com/reference/reactivate-user.md - https://docs.joinpopp.com/reference/remove-candidate-document-by-external-id.md - https://docs.joinpopp.com/reference/remove-candidate-document.md - https://docs.joinpopp.com/reference/remove-candidates-from-list-by-external-id.md - https://docs.joinpopp.com/reference/remove-candidates-from-list.md - https://docs.joinpopp.com/reference/reparse-candidate-cv-by-external-id.md - https://docs.joinpopp.com/reference/reparse-candidate-cv.md - https://docs.joinpopp.com/reference/resend-booking-url.md - https://docs.joinpopp.com/reference/resume-workflow-by-external-id.md - https://docs.joinpopp.com/reference/resume-workflow.md - https://docs.joinpopp.com/reference/send-conversation-message.md - https://docs.joinpopp.com/reference/set-user-calendar-availability.md - https://docs.joinpopp.com/reference/sign-out-user-by-email.md - https://docs.joinpopp.com/reference/sign-out-user.md - https://docs.joinpopp.com/reference/start-workflow-runs-by-external-id.md - https://docs.joinpopp.com/reference/start-workflow-runs.md - https://docs.joinpopp.com/reference/stop-campaign.md - https://docs.joinpopp.com/reference/takeover-conversation.md - https://docs.joinpopp.com/reference/update-analysis.md - https://docs.joinpopp.com/reference/update-booking.md - https://docs.joinpopp.com/reference/update-campaign.md - https://docs.joinpopp.com/reference/update-candidate-by-external-id.md - https://docs.joinpopp.com/reference/update-candidate-list-by-external-id.md - https://docs.joinpopp.com/reference/update-candidate-list.md - https://docs.joinpopp.com/reference/update-candidate-note.md - https://docs.joinpopp.com/reference/update-candidate.md - https://docs.joinpopp.com/reference/update-custom-field.md - https://docs.joinpopp.com/reference/update-document-credential.md - https://docs.joinpopp.com/reference/update-document-type.md - https://docs.joinpopp.com/reference/update-meeting-template.md - https://docs.joinpopp.com/reference/update-organization-config-by-external-id.md - https://docs.joinpopp.com/reference/update-organization-config.md - https://docs.joinpopp.com/reference/update-organization-details.md - https://docs.joinpopp.com/reference/update-requirements-and-reanalyse.md - https://docs.joinpopp.com/reference/update-user-by-email.md - https://docs.joinpopp.com/reference/update-user.md - https://docs.joinpopp.com/reference/update-webhook.md - https://docs.joinpopp.com/reference/update-workflow-by-external-id.md - https://docs.joinpopp.com/reference/update-workflow.md merge: pages: 149 deduped: 618 conflicts_kept_first: 0