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

# Create a task

> <small>_Requires the `tasks:write` scope (or a broader one that includes it)._</small>

Creates a new task. The template body may contain handlebars variables
(e.g. `{{firstName}}`) which are resolved when the task is read or executed.



## OpenAPI

````yaml /api-reference/bundled.yaml post /v3/tasks
openapi: 3.1.0
info:
  version: 3.0.0
  title: Reply API
  description: API for managing email sequences, contacts, and automation workflows
servers:
  - url: https://api.reply.io
security:
  - bearerAuth: []
tags:
  - name: User Account
    description: Account information and authentication verification
  - name: Accounts
    description: Manage accounts (companies/organizations)
  - name: AI SDR Insights
    description: Read AI SDR insights for sequence contacts
  - name: AI SDR Intent Signals
    description: >-
      Read Reply industry IDs and technology slugs used in AI SDR intent-signal
      configuration (typeahead)
  - name: AI SDR Sequences
    description: >-
      Manage AI SDR sequences and their AI SDR-specific settings — create, read
      settings, partial update, autopilot enable/disable/force-start, approval
      mode, generated step types, and playbook/knowledge-base connections
  - name: AI SDR Web Search
    description: Find contacts via AI-driven web search and review past searches
  - name: Attachments
    description: >-
      Upload file attachments used across email templates, sequence steps, and
      direct emails
  - name: Account Lists
    description: Manage account lists and account membership
  - name: Background Jobs
    description: >-
      Track and cancel asynchronous background operations (e.g., email
      validation)
  - name: Custom Fields
    description: Manage custom contact fields
  - name: Direct Outreach
    description: >-
      Send one-off outreach directly to a contact outside of any sequence —
      direct emails and LinkedIn connection requests, messages, InMails, and
      voice messages
  - name: Contact Blacklist Rules
    description: Manage blacklist rules for domains, emails, and email exceptions
  - name: Contact Enrichment
    description: >-
      Enrich contacts with emails, phone numbers, LinkedIn data, and AI-filled
      custom fields
  - name: Contact Lists
    description: Manage contact lists and contact membership
  - name: Contacts
    description: Manage individual contacts
  - name: Email Accounts
    description: Manage email accounts used for sending and receiving
  - name: Email Templates
    description: Manage email templates and template folders
  - name: Email Validations
    description: Estimate and schedule asynchronous email validation jobs
  - name: Holiday Calendars
    description: Manage holiday calendars for scheduling
  - name: Inbox
    description: >-
      Manage inbox threads and per-team thread categories — list/filter, read
      state, replies, category assignment, and meeting-intent flagging
  - name: LinkedIn Accounts
    description: Manage LinkedIn accounts for outreach
  - name: Live Data
    description: >-
      Find new contacts via Live Data searches and read typeahead values for the
      Live Data / Autopilot filter sidebar
  - name: AI SDR Knowledge Bases
    description: >-
      Manage AI SDR knowledge bases — collections of documents, links, reply
      handlers, and reengagement cards that inform the agent's responses
  - name: AI SDR Offers
    description: >-
      Manage AI SDR offers — bundles of company-context inputs (ICP, pain
      points, value propositions, etc.) used to personalize outreach
  - name: AI SDR Pending Approvals
    description: >-
      Review, send, regenerate, and provide feedback on AI-generated messages
      awaiting human approval
  - name: AI SDR Playbooks
    description: >-
      Manage AI SDR playbooks — tone, voice, and style guides applied during
      personalized message generation
  - name: Reports
    description: >-
      Generate and access performance reports across email, calls, tasks,
      LinkedIn, and team performance
  - name: Schedules
    description: Manage email send schedules and timing
  - name: Settings
    description: Manage team and user settings
  - name: Sequence Contacts
    description: Manage contacts within sequences
  - name: Sequence Email Accounts
    description: Manage email accounts linked to sequences
  - name: Sequence Folders
    description: Organize sequences into folders
  - name: Sequence LinkedIn Accounts
    description: Manage LinkedIn accounts linked to sequences
  - name: AI SDR Sequence Preview
    description: >-
      Read and regenerate per-contact previews of the messages a sequence will
      send, and provide feedback on preview messages
  - name: Sequence Steps
    description: Manage individual steps in sequences
  - name: Sequence Templates
    description: Manage sequence templates
  - name: Sequences
    description: Manage email automation sequences
  - name: AI SDR Strategist
    description: Trigger AI Strategist runs
  - name: Tasks
    description: Manage tasks and to-do items
  - name: Webhooks
    description: Manage webhook subscriptions and inspect delivery history
paths:
  /v3/tasks:
    post:
      tags:
        - Tasks
      summary: Create a task
      description: >-
        <small>_Requires the `tasks:write` scope (or a broader one that includes
        it)._</small>


        Creates a new task. The template body may contain handlebars variables

        (e.g. `{{firstName}}`) which are resolved when the task is read or
        executed.
      operationId: CreateTask
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: TaskCreateRequest
              description: Request body for creating a new task.
              properties:
                taskType:
                  type: string
                  description: >-
                    Task type. Must be a valid enum value.

                    Possible values: `toDo`, `call`, `meeting`, `linkedIn`,
                    `manualEmail`, `sms`, `whatsApp`.
                  enum:
                    - toDo
                    - call
                    - meeting
                    - linkedIn
                    - manualEmail
                    - sms
                    - whatsApp
                startAt:
                  type: string
                  format: date-time
                  description: Task start time. Must be on or after 2015-01-01.
                dueTo:
                  type: string
                  format: date-time
                  description: Task due time. Must be after startAt.
                contactId:
                  type: integer
                  nullable: true
                  description: >-
                    Contact (prospect) ID to associate with the task. Required
                    for template variable rendering.
                linkedInTaskType:
                  type: string
                  nullable: true
                  description: >-
                    LinkedIn action subtype. Only applicable for LinkedIn tasks
                    (taskType=linkedIn). Must be a valid enum value when
                    provided.

                    Possible values: `message`, `connect`, `inMail`,
                    `viewProfile`.
                  enum:
                    - message
                    - connect
                    - inMail
                    - viewProfile
                template:
                  description: Task content template. Body is required.
                  type: object
                  title: TaskTemplate
                  properties:
                    body:
                      type: string
                      description: >-
                        Template body text. May contain `{{variable}}`
                        placeholders for sequence tasks.
                    subject:
                      type: string
                      nullable: true
                      description: >-
                        Email subject or LinkedIn message subject. Null for
                        non-email/LinkedIn task types.
                    attachmentIdList:
                      type: array
                      nullable: true
                      items:
                        type: integer
                      description: >-
                        Read-only. Attachment IDs for ManualEmail tasks (set by
                        sequence system, not user-editable via API).
              required:
                - taskType
                - startAt
                - dueTo
                - template
      responses:
        '201':
          description: Task created successfully.
          content:
            application/json:
              schema:
                type: object
                title: Task
                description: >-
                  Full task detail returned by GET by ID, Create, and Update
                  endpoints.
                properties:
                  id:
                    type: integer
                    readOnly: true
                    description: Task ID.
                  contactId:
                    type: integer
                    nullable: true
                    description: Associated contact (prospect) ID.
                  taskType:
                    type: string
                    description: >-
                      Task type.

                      Possible values: `toDo`, `call`, `meeting`, `linkedIn`,
                      `manualEmail`, `sms`, `whatsApp`.
                    enum:
                      - toDo
                      - call
                      - meeting
                      - linkedIn
                      - manualEmail
                      - sms
                      - whatsApp
                  status:
                    type: string
                    readOnly: true
                    description: >-
                      Task status.

                      Possible values: `new`, `finished`, `cancelled`,
                      `archived`, `sequenceDetached`.
                    enum:
                      - new
                      - finished
                      - cancelled
                      - archived
                      - sequenceDetached
                  linkedInTaskType:
                    type: string
                    nullable: true
                    description: >-
                      LinkedIn action subtype. Only present for LinkedIn tasks.

                      Possible values: `message`, `connect`, `inMail`,
                      `viewProfile`.
                    enum:
                      - message
                      - connect
                      - inMail
                      - viewProfile
                  sequenceId:
                    type: integer
                    nullable: true
                    description: Sequence ID if this task was created by a sequence.
                  sequenceStepId:
                    type: integer
                    nullable: true
                    description: >-
                      Sequence step ID. Available when the ExtendedFilterInTasks
                      feature is enabled.
                  sequenceStepDisplayName:
                    type: string
                    nullable: true
                    description: Human-readable sequence step name (e.g. "Step 2 - Email").
                  assignedUserId:
                    type: integer
                    description: ID of the user this task is assigned to.
                  creationSource:
                    type: string
                    readOnly: true
                    description: |-
                      How the task was created.
                      Possible values: `user`, `sequence`, `meeting`.
                    enum:
                      - user
                      - sequence
                      - meeting
                  createdAt:
                    type: string
                    format: date-time
                    readOnly: true
                    description: When the task was created.
                  startAt:
                    type: string
                    format: date-time
                    description: >-
                      Task start time. When `isScheduled` is true, this is the
                      scheduled execution time.
                  dueTo:
                    type: string
                    format: date-time
                    description: Task due time.
                  finishedAt:
                    type: string
                    format: date-time
                    nullable: true
                    readOnly: true
                    description: When the task was completed. Null for active tasks.
                  isFailed:
                    type: boolean
                    readOnly: true
                    description: Whether the task execution failed.
                  isScheduled:
                    type: boolean
                    description: Whether the task is scheduled for automatic execution.
                  template:
                    description: >-
                      Raw task template. For active tasks, may contain
                      `{{variable}}` placeholders.

                      For finished tasks, contains the final content (raw
                      version is no longer available).
                    type: object
                    title: TaskTemplate
                    properties:
                      body:
                        type: string
                        description: >-
                          Template body text. May contain `{{variable}}`
                          placeholders for sequence tasks.
                      subject:
                        type: string
                        nullable: true
                        description: >-
                          Email subject or LinkedIn message subject. Null for
                          non-email/LinkedIn task types.
                      attachmentIdList:
                        type: array
                        nullable: true
                        items:
                          type: integer
                        description: >-
                          Read-only. Attachment IDs for ManualEmail tasks (set
                          by sequence system, not user-editable via API).
                  content:
                    nullable: true
                    allOf:
                      - type: object
                        title: TaskContent
                        description: >-
                          Rendered task content with all variables resolved.
                          Returned only when `includeContent=true` is requested
                          on GET by ID.

                          Also used as input for the execute endpoint — the
                          final text to send.
                        properties:
                          body:
                            type: string
                            description: Rendered body text with all variables resolved.
                          subject:
                            type: string
                            nullable: true
                            description: Rendered subject for ManualEmail/LinkedIn tasks.
                    description: >-
                      Rendered content with variables resolved. Only populated
                      when `includeContent=true` query parameter is set.

                      Null by default.
                  deliveryInfo:
                    nullable: true
                    allOf:
                      - type: object
                        title: TaskDeliveryInfo
                        description: >-
                          Delivery target information. Only one field is
                          populated depending on task type.

                          For active tasks, sourced from the prospect record.
                          For finished ManualEmail tasks, sourced from the sent
                          email.
                        properties:
                          email:
                            type: string
                            nullable: true
                            description: Recipient email address (ManualEmail tasks).
                          phoneNumber:
                            type: string
                            nullable: true
                            description: Recipient phone number (Call and SMS tasks).
                          linkedInUrl:
                            type: string
                            nullable: true
                            description: Prospect's LinkedIn profile URL (LinkedIn tasks).
                    description: >-
                      Delivery target information. Populated for ManualEmail
                      (email), Call/SMS (phone), and LinkedIn (URL) tasks.

                      Null for ToDo, Meeting, and WhatsApp tasks.
        '400':
          description: >-
            Validation failure on the request body (missing required fields,
            invalid enum value

            for `taskType` or `linkedInTaskType`, or unparseable JSON).
          content:
            application/problem+json:
              schema:
                allOf:
                  - allOf:
                      - type: object
                        title: Problem Details
                        description: >-
                          Bare RFC 9457 problem-details envelope. Returned by
                          middleware-level errors

                          that don't carry domain context: 401 Unauthorized
                          (auth middleware),

                          429 Too Many Requests (rate-limit middleware), and
                          route-level 404 / 405 /

                          415 (framework middleware).


                          Business and validation responses extend this envelope
                          and add additional

                          fields — see `business-problem.model.yaml` (adds
                          `code` slug) and

                          `validation-problem.model.yaml` (adds `errors[]`
                          array).
                        properties:
                          title:
                            type: string
                            description: Short, human-readable summary of the problem.
                          status:
                            type: integer
                            description: HTTP status code.
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                            description: >-
                              Human-readable explanation specific to this
                              occurrence.
                      - type: object
                        properties:
                          errors:
                            type: array
                            description: >-
                              List of field-level validation errors. Always
                              non-empty when this

                              envelope is returned. Each entry pins a single
                              offending field

                              via JSON Pointer plus a sanitized detail string.
                            items:
                              type: object
                              title: Validation Error
                              description: A single field-level validation error.
                              properties:
                                pointer:
                                  type: string
                                  description: >-
                                    JSON Pointer (RFC 6901) to the offending
                                    field — e.g.

                                    `/steps/0/subject`.


                                    * An empty string (`""`) means the error
                                    applies to the whole
                                      request body (e.g. body is missing or unparseable).
                                    * For route or query parameter failures the
                                    pointer is the parameter
                                      name (e.g. `id`, `top`).
                                  example: /steps/0/subject
                                detail:
                                  type: string
                                  description: >-
                                    Sanitized, human-readable explanation of
                                    this field's error. One of a

                                    small set of templates — `"Field is
                                    required."`, `"Value has an

                                    invalid type."`, `"Value has an invalid
                                    format."`, `"Request body is

                                    not valid JSON."`, `"The request body is
                                    required and cannot be

                                    empty."` — or a FluentValidator message on
                                    body endpoints.
                                  example: Field is required.
                    title: Validation Problem
                    description: >-
                      Input-validation error response at 400. Returned when the
                      request body

                      fails binding, FluentValidator rules, or when route/query
                      parameter

                      attribute validation (`[Range]`, `[Required]`) fails.
                      Route, query, and

                      body errors are combined into a single `errors[]` array —
                      clients should

                      not assume one error per request.
                  - example:
                      title: Validation failed
                      status: 400
                      detail: The request body contains validation errors.
                      errors:
                        - pointer: /name
                          detail: Field is required.
              example:
                title: Validation failed
                status: 400
                detail: The request body contains validation errors.
                errors:
                  - pointer: /taskType
                    detail: '''taskType'' is required.'
                  - pointer: /contactId
                    detail: '''contactId'' must be a positive integer.'
        '401':
          description: >-
            Unauthorized. The response body is empty; check the
            `WWW-Authenticate` header for the expected scheme.
          content:
            application/problem+json:
              schema:
                allOf:
                  - type: object
                    title: Problem Details
                    description: >-
                      Bare RFC 9457 problem-details envelope. Returned by
                      middleware-level errors

                      that don't carry domain context: 401 Unauthorized (auth
                      middleware),

                      429 Too Many Requests (rate-limit middleware), and
                      route-level 404 / 405 /

                      415 (framework middleware).


                      Business and validation responses extend this envelope and
                      add additional

                      fields — see `business-problem.model.yaml` (adds `code`
                      slug) and

                      `validation-problem.model.yaml` (adds `errors[]` array).
                    properties:
                      title:
                        type: string
                        description: Short, human-readable summary of the problem.
                      status:
                        type: integer
                        description: HTTP status code.
                        minimum: 100
                        maximum: 599
                      detail:
                        type: string
                        description: >-
                          Human-readable explanation specific to this
                          occurrence.
                  - example:
                      title: Unauthorized
                      status: 401
                      detail: Authentication credentials are missing or invalid.
        '403':
          description: User lacks required feature scope to create tasks
          content:
            application/problem+json:
              schema:
                allOf:
                  - allOf:
                      - type: object
                        title: Problem Details
                        description: >-
                          Bare RFC 9457 problem-details envelope. Returned by
                          middleware-level errors

                          that don't carry domain context: 401 Unauthorized
                          (auth middleware),

                          429 Too Many Requests (rate-limit middleware), and
                          route-level 404 / 405 /

                          415 (framework middleware).


                          Business and validation responses extend this envelope
                          and add additional

                          fields — see `business-problem.model.yaml` (adds
                          `code` slug) and

                          `validation-problem.model.yaml` (adds `errors[]`
                          array).
                        properties:
                          title:
                            type: string
                            description: Short, human-readable summary of the problem.
                          status:
                            type: integer
                            description: HTTP status code.
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                            description: >-
                              Human-readable explanation specific to this
                              occurrence.
                      - type: object
                        properties:
                          code:
                            type: string
                            description: >-
                              Stable, machine-readable error slug in the form

                              `"<resource>.<variant>"`.


                              * `resource` is the camelCased domain — e.g.
                              `sequence`,
                                `contact`, `inboxThread`, `blacklistDomainRule`.
                              * `variant` is the camelCased specific failure
                              mode — e.g.
                                `notFound`, `forbidden`, `duplicateName`, `globalRuleReadOnly`.

                              Use `code` for programmatic error handling; use
                              `detail` for

                              user-facing messages. Slugs are stable across
                              server-side enum

                              reorderings and never change meaning under a given
                              resource.
                            pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                            example: sequence.notFound
                    title: Business Problem
                    description: >-
                      Domain error response carrying a stable, namespaced error
                      slug.

                      Emitted for most 4xx responses (business 400, 403, 404,
                      409, …) and

                      for 503 when a downstream dependency is unavailable.
                  - example:
                      title: Forbidden
                      status: 403
                      detail: You do not have permission to access this resource.
                      code: sequence.forbidden
              example:
                title: Forbidden
                status: 403
                detail: Feature scopes [ManageTask] are denied for userId 123.
                code: task.forbidden
        '429':
          description: Too Many Requests
          headers:
            Retry-After:
              description: Seconds to wait before retrying
              schema:
                type: integer
                minimum: 1
          content:
            application/problem+json:
              schema:
                allOf:
                  - type: object
                    title: Problem Details
                    description: >-
                      Bare RFC 9457 problem-details envelope. Returned by
                      middleware-level errors

                      that don't carry domain context: 401 Unauthorized (auth
                      middleware),

                      429 Too Many Requests (rate-limit middleware), and
                      route-level 404 / 405 /

                      415 (framework middleware).


                      Business and validation responses extend this envelope and
                      add additional

                      fields — see `business-problem.model.yaml` (adds `code`
                      slug) and

                      `validation-problem.model.yaml` (adds `errors[]` array).
                    properties:
                      title:
                        type: string
                        description: Short, human-readable summary of the problem.
                      status:
                        type: integer
                        description: HTTP status code.
                        minimum: 100
                        maximum: 599
                      detail:
                        type: string
                        description: >-
                          Human-readable explanation specific to this
                          occurrence.
              example:
                title: Too Many Requests
                status: 429
                detail: Rate limit exceeded. Retry after 60 seconds.
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Authenticate every request with a Bearer token. Pass your Reply API key
        in the

        `Authorization` header:


        ```

        Authorization: Bearer <your-api-key>

        ```


        Get your API key from the Reply dashboard: **Settings → API Key**.

````