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

# Find or start conversation

> Returns the conversation between an account and a person. When there is none yet, a draft is created that becomes a real conversation once you send the first message.



## OpenAPI

````yaml /openapi.json post /conversations/get-or-create
openapi: 3.1.0
info:
  title: ReachHunt API
  version: 1.0.0
  description: >-
    The ReachHunt API gives your own apps and scripts programmatic access to
    your workspace: accounts, campaigns, lead lists, conversations, messages,
    tags and statuses.


    Send your API key in the `Authorization` header: `Authorization: Bearer
    YOUR_API_KEY`. The key decides the workspace, so no path or parameter names
    one.


    Every response has the same envelope: `{ "status": true, "data": ...,
    "error": null }`.
servers:
  - url: https://api.reachhunt.ai/api/v1
    description: Production
security: []
tags:
  - name: Workspaces
    description: Your workspace and the people in it.
  - name: Accounts
    description: The X and LinkedIn accounts you connected.
  - name: Analytics
    description: Activity over time.
  - name: Credits
    description: AI credits and how they were used.
  - name: Campaigns
    description: Outreach that messages your leads step by step.
  - name: Agents
    description: AI agents that reply to your leads.
  - name: Tags
    description: Labels you put on conversations.
  - name: Statuses
    description: Pipeline stages you put conversations in.
  - name: Leads
    description: The people in your lead lists.
  - name: Lead lists
    description: Lists of people you collect to message.
  - name: Conversations
    description: The conversations in your inbox.
  - name: Messages
    description: The messages in a conversation.
  - name: Conversation details
    description: Your team's record of the person in a conversation.
  - name: Internal notes
    description: Notes only your team sees.
  - name: Scheduled messages
    description: Messages set to send later.
  - name: Templates
    description: Saved messages you can reuse.
  - name: Webhook events
    description: What each event sends.
paths:
  /conversations/get-or-create:
    post:
      tags:
        - Conversations
      summary: Find or start conversation
      description: >-
        Returns the conversation between an account and a person. When there is
        none yet, a draft is created that becomes a real conversation once you
        send the first message.
      operationId: conversations.getOrCreate
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                accountId:
                  type: string
                  description: >-
                    Optional. The connected account. When left out, one on that
                    network is picked.
                platform:
                  type: string
                  enum:
                    - x
                    - linkedin
                  description: >-
                    The network. Needed with `platformId`; taken from the lead
                    when you send `prospectId`.
                platformId:
                  type: string
                  description: The person's network ID.
                prospectId:
                  type: string
                  description: Or a lead ID instead of `platform` and `platformId`.
              required: []
      responses:
        '200':
          description: 'OK. Check `status`: errors the API handles itself also return 200.'
          content:
            application/json:
              schema:
                type: object
                required:
                  - status
                  - data
                  - error
                properties:
                  status:
                    type: boolean
                    description: '`true` when the request succeeded.'
                  data:
                    type: object
                    properties:
                      conversation:
                        $ref: '#/components/schemas/Conversation'
                      created:
                        type: boolean
                        description: Whether a new draft was created.
                      canDm:
                        type:
                          - boolean
                          - 'null'
                        description: >-
                          Whether you can send a direct message. `null` when it
                          is not known.
                      canSend:
                        type: boolean
                        description: Whether a message can be sent now.
                      blockedReason:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Why you cannot send, such as `peer_unreachable` or
                          `inmail_only`. `null` when you can.
                    required:
                      - conversation
                      - created
                      - canDm
                      - canSend
                      - blockedReason
                  error:
                    type: 'null'
                    description: Always `null` on success.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PlanRequired'
        '500':
          $ref: '#/components/responses/ServerError'
      security:
        - bearerAuth: []
components:
  schemas:
    Conversation:
      type: object
      description: One conversation between a connected account and one person.
      required:
        - conversationId
        - accountId
        - platform
        - type
        - participantCount
        - participants
        - peerUnavailable
        - tags
        - statusId
        - valuation
        - assigneeId
        - readUpTo
        - peerReadUpTo
        - hasUnread
        - unreadCount
        - isClosed
        - isDraft
        - sendTyping
        - lastMessage
      properties:
        conversationId:
          type: string
          description: 'The conversation ID. URL-encode it in paths: X IDs contain `:`.'
          examples:
            - '1876543210987654321:1900000000000000001'
        accountId:
          type: string
          description: The connected account the conversation belongs to.
          examples:
            - 4f1c9a2e-6b7d-4c3a-9e51-0a8b7c6d5e4f
        platform:
          $ref: '#/components/schemas/Platform'
        type:
          type: string
          enum:
            - one_to_one
          description: Always `one_to_one`. Group chats are not listed.
          examples:
            - one_to_one
        participantCount:
          type: integer
          description: >-
            How many people are in the conversation, the connected account
            included.
          examples:
            - 2
        participants:
          type: array
          description: The other people in the conversation.
          items:
            $ref: '#/components/schemas/Participant'
        peerUnavailable:
          type: boolean
          description: >-
            `true` when the other person's profile can no longer be loaded, for
            example after they deleted their account.
          examples:
            - false
        tags:
          type: array
          description: The tags on this conversation.
          items:
            $ref: '#/components/schemas/Tag'
        statusId:
          type:
            - string
            - 'null'
          description: >-
            The ID of the status this conversation is in. `null` when it has
            none.
          examples:
            - b8d1f6f4-3a52-4f3a-8f0b-0c2f6a9d1e11
        valuation:
          type:
            - number
            - 'null'
          description: The deal value you set for this person. `null` when none is set.
          examples:
            - 1500
        assigneeId:
          type:
            - string
            - 'null'
          description: The ID of the teammate it is assigned to. `null` when unassigned.
          examples:
            - null
        readUpTo:
          type:
            - string
            - 'null'
          description: Marker of the last message you have read.
          examples:
            - '1900000000000000123'
        peerReadUpTo:
          type:
            - string
            - 'null'
          description: Marker of the last message the other person has read.
          examples:
            - '1900000000000000100'
        hasUnread:
          type: boolean
          description: Whether there are messages you have not read.
          examples:
            - true
        unreadCount:
          type: integer
          description: How many messages you have not read.
          examples:
            - 1
        isClosed:
          type: boolean
          description: Whether the conversation is closed.
          examples:
            - false
        isDraft:
          type: boolean
          description: Always `false` here. Drafts are not listed.
          examples:
            - false
        sendTyping:
          type:
            - boolean
            - 'null'
          description: >-
            Whether typing indicators are sent in this conversation. `null`
            follows the workspace setting.
          examples:
            - null
        lastMessage:
          type:
            - object
            - 'null'
          description: >-
            The most recent message. `null` when the conversation has no
            messages yet.
          required:
            - text
            - fromMe
            - seqId
            - createdAt
            - attachmentCount
            - attachmentType
            - seen
          properties:
            text:
              type:
                - string
                - 'null'
              description: The message text. `null` for a message with only an attachment.
              examples:
                - Thanks, sounds good. Send the details over.
            fromMe:
              type:
                - boolean
                - 'null'
              description: >-
                `true` when the connected account sent it, `false` when the
                other person did.
              examples:
                - false
            seqId:
              type:
                - string
                - 'null'
              description: The network's own reference for the message.
              examples:
                - '1900000000000000123'
            createdAt:
              type:
                - string
                - 'null'
              format: date-time
              description: When it was sent, in ISO 8601 UTC.
              examples:
                - '2026-10-17T14:05:00.000Z'
            attachmentCount:
              type: integer
              description: How many attachments it carries.
              examples:
                - 0
            attachmentType:
              type:
                - string
                - 'null'
              description: >-
                The kind of attachment, such as `image`, `gif`, `video`, `audio`
                or `file`. `null` when there is none.
              examples:
                - null
            seen:
              type:
                - boolean
                - 'null'
              description: >-
                `true` when the other person has read your last message. `null`
                when that is not known, or when the last message came from them.
              examples:
                - null
    Platform:
      type: string
      enum:
        - x
        - linkedin
      description: The network the item belongs to.
      examples:
        - linkedin
    Participant:
      type: object
      description: >-
        The other person in a conversation. Profile details that are not known
        are `null`. LinkedIn profiles also carry `experience`, `education` and
        `skills`.
      additionalProperties: true
      required:
        - platform
        - platformId
        - userName
        - name
        - url
        - profilePicture
        - headline
        - canDm
        - isVerified
        - followers
        - following
        - location
        - description
      properties:
        platform:
          $ref: '#/components/schemas/Platform'
        platformId:
          type:
            - string
            - 'null'
          description: >-
            The ID the network gives this person. Always read together with
            `platform`.
          examples:
            - '1876543210987654321'
        userName:
          type:
            - string
            - 'null'
          description: >-
            The handle on X, or the public profile name on LinkedIn, without a
            prefix.
          examples:
            - janedoe
        name:
          type:
            - string
            - 'null'
          description: The display name.
          examples:
            - Jane Doe
        url:
          type:
            - string
            - 'null'
          description: Link to the profile on the network.
          examples:
            - https://x.com/janedoe
        profilePicture:
          type:
            - string
            - 'null'
          description: Link to the profile picture.
          examples:
            - https://example.com/avatars/janedoe.jpg
        headline:
          type:
            - string
            - 'null'
          description: The profile headline. LinkedIn only.
          examples:
            - Head of Growth at Northwind
        canDm:
          type:
            - boolean
            - 'null'
          description: >-
            Whether you can send this person a direct message. `null` when it is
            not known.
          examples:
            - true
        isVerified:
          type: boolean
          description: Whether the profile has a verification badge.
          examples:
            - false
        followers:
          type:
            - integer
            - 'null'
          description: Follower count, when the network shares it.
          examples:
            - 1280
        following:
          type:
            - integer
            - 'null'
          description: Number of accounts the person follows, when the network shares it.
          examples:
            - 340
        location:
          type:
            - string
            - 'null'
          description: The location on the profile.
          examples:
            - Berlin
        description:
          type:
            - string
            - 'null'
          description: The bio or about text.
          examples:
            - Growth, partnerships and outbound.
        isBlueVerified:
          type: boolean
        isVerifiedOrganization:
          type: boolean
        verified:
          type:
            - string
            - 'null'
          description: The verification badge.
        verifiedType:
          type:
            - string
            - 'null'
        createdAt:
          type:
            - string
            - 'null'
          description: When the profile was created on the network.
        coverPicture:
          type:
            - string
            - 'null'
          description: Link to the cover image.
        publicIdentifier:
          type:
            - string
            - 'null'
          description: The public profile name on LinkedIn.
        industry:
          type:
            - string
            - 'null'
        degree:
          type:
            - integer
            - 'null'
          description: Connection degree. LinkedIn only.
        isPremium:
          type:
            - boolean
            - 'null'
        isInfluencer:
          type:
            - boolean
            - 'null'
        isCreator:
          type:
            - boolean
            - 'null'
        type:
          type: string
          description: The kind of profile, such as a person or a company.
        experience:
          type: array
          items:
            type: object
            additionalProperties: true
          description: Jobs on the profile. LinkedIn only.
        education:
          type: array
          items:
            type: object
            additionalProperties: true
          description: Schools on the profile. LinkedIn only.
        skills:
          type: array
          items:
            type: string
          description: Skills on the profile. LinkedIn only.
        phones:
          type: array
          items: {}
          description: Phone numbers on the profile.
        websites:
          type: array
          items: {}
          description: Websites on the profile.
        honors:
          type: array
          items: {}
          description: Honors on the profile.
        birthday:
          type:
            - string
            - 'null'
        address:
          type:
            - string
            - 'null'
        connectedSince:
          type:
            - string
            - 'null'
        hasPublicKey:
          type: boolean
        isVerifiedOrganizationAffiliate:
          type: boolean
    Tag:
      type: object
      description: A label you can put on a conversation.
      required:
        - id
        - label
        - color
      properties:
        id:
          type: string
          description: The tag ID.
          examples:
            - 7c1f0c52-6d1a-4a49-9a63-2b3c4d5e6f70
        label:
          type: string
          description: The tag name, up to 24 characters.
          examples:
            - Hot lead
        color:
          type: string
          description: The tag color as a lowercase six-digit hex value.
          examples:
            - '#e24c5d'
    Failure:
      type: object
      required:
        - status
        - data
        - error
      properties:
        status:
          type: boolean
          description: Always `false` for an error.
        data:
          type: 'null'
          description: Always `null` for an error.
        error:
          type: string
          description: What went wrong, in plain words.
  responses:
    Unauthorized:
      description: The API key is missing or not valid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Failure'
          example:
            status: false
            data: null
            error: Not authenticated
    PlanRequired:
      description: The workspace has no active plan, or its trial has ended.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Failure'
          example:
            status: false
            data: null
            error: Your free trial has ended. Pick a plan to continue.
    ServerError:
      description: Something failed on our side. Try again.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Failure'
          example:
            status: false
            data: null
            error: Something went wrong. Please try again.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: Bearer
      description: >-
        Your API key, sent as `Authorization: Bearer YOUR_API_KEY`. Create one
        in **Settings → API**.
      x-default: Bearer YOUR_API_KEY

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.