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

# Log an explicitly confirmed reply

> First GET /applications/{id}, review the full application and retain its opaque replyVersion. POST that value as expectedVersion. On CONFLICT (409), reload and review again before retrying. Records the user's confirmation of replying now, restarts the current stage's no-reply clock and clears the application's follow-up and its delivery schedule only at the reviewed revision. Sends no message. Keeps stage dates and interview reminders. Requires authentication.



## OpenAPI

````yaml /spec.json post /applications/{id}/replies
openapi: 3.1.1
info:
  title: Reactive Resume
  version: 6.0.10
  description: >-
    Reactive Resume API. Mutations do not support Idempotency-Key. Do not
    automatically retry POST, PUT, PATCH or DELETE requests after a timeout:
    first read the resource to determine whether the operation succeeded.
    Existing enum values and response shapes are retained for compatibility.
  license:
    name: MIT
    url: https://github.com/reactive-resume/reactive-resume/blob/main/LICENSE
  contact:
    name: Amruth Pillai
    email: amruth@rxresu.me
    url: https://amruthpillai.com
servers:
  - url: https://rxresu.me/api/openapi
security:
  - apiKey: []
  - bearerAuth: []
  - cookieAuth: []
externalDocs:
  url: https://docs.rxresu.me
  description: Reactive Resume Documentation
paths:
  /applications/{id}/replies:
    post:
      tags:
        - Applications
      summary: Log an explicitly confirmed reply
      description: >-
        First GET /applications/{id}, review the full application and retain its
        opaque replyVersion. POST that value as expectedVersion. On CONFLICT
        (409), reload and review again before retrying. Records the user's
        confirmation of replying now, restarts the current stage's no-reply
        clock and clears the application's follow-up and its delivery schedule
        only at the reviewed revision. Sends no message. Keeps stage dates and
        interview reminders. Requires authentication.
      operationId: logApplicationReply
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                expectedVersion:
                  type: string
                  minLength: 64
                  maxLength: 64
                  description: >-
                    The replyVersion from the full application you reviewed;
                    reload and review again on CONFLICT.
              required:
                - expectedVersion
      responses:
        '200':
          description: The updated application.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    description: The ID of the application.
                  company:
                    type: string
                    minLength: 1
                    description: The company applied to.
                  role:
                    type: string
                    minLength: 1
                    description: The role / job title.
                  location:
                    anyOf:
                      - type: string
                      - type: 'null'
                  salary:
                    anyOf:
                      - type: string
                      - type: 'null'
                  status:
                    enum:
                      - saved
                      - applied
                      - screening
                      - interview
                      - offer
                      - closed
                    type: string
                    description: >-
                      The current pipeline stage. `closed` ends it, with a
                      reason.
                  laneId:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: The owner-defined pipeline lane, when supported.
                  closedReason:
                    anyOf:
                      - enum:
                          - accepted
                          - not-selected
                          - withdrew
                          - accepted-other
                          - no-response
                        type: string
                      - type: 'null'
                    description: >-
                      Why a closed application ended: accepted, not-selected,
                      withdrew, accepted-other or no-response.
                  resumeId:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: The linked Reactive Resume, if any.
                  coverLetterId:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: The linked saved cover letter, if any.
                  sentResumeVersionId:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: >-
                      The version of the linked resume saved when the
                      application was sent (reached Applied).
                  sentCheckScore:
                    anyOf:
                      - type: integer
                        minimum: -9007199254740991
                        maximum: 9007199254740991
                      - type: 'null'
                    description: The resume's Check score when it was sent, out of 100.
                  sentCoverLetterVersionId:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: >-
                      The version of the linked letter saved when the
                      application was sent.
                  source:
                    anyOf:
                      - type: string
                      - type: 'null'
                  tags:
                    type: array
                    items:
                      type: string
                  sourceUrl:
                    anyOf:
                      - type: string
                        format: uri
                      - type: 'null'
                  jobDescription:
                    anyOf:
                      - type: string
                        maxLength: 20000
                      - type: 'null'
                  postingSource:
                    anyOf:
                      - type: object
                        properties:
                          method:
                            enum:
                              - paste
                              - builtin
                              - firecrawl
                              - tavily
                              - exa
                            type: string
                          format:
                            enum:
                              - text
                              - markdown
                            type: string
                          requestedUrl:
                            type: string
                            format: uri
                          resolvedUrl:
                            type: string
                            format: uri
                          retrievedAt:
                            type: string
                            format: date-time
                          providerFetchedAt:
                            type: string
                            format: date-time
                          truncated:
                            type: boolean
                          completeness:
                            enum:
                              - unknown
                              - incomplete
                            type: string
                          language:
                            type: string
                            maxLength: 35
                          fallbackReason:
                            enum:
                              - unsafe-url
                              - unreachable
                              - not-a-page
                              - too-large
                              - auth
                              - quota
                              - malformed
                              - empty
                              - challenge
                              - timeout
                              - unavailable
                              - rate-limit
                            type: string
                        required:
                          - method
                          - format
                          - truncated
                          - completeness
                      - type: 'null'
                  requirements:
                    type: array
                    items:
                      type: string
                    description: >-
                      What the posting asks for, as read when the application
                      was added.
                  matchScore:
                    anyOf:
                      - type: integer
                        minimum: 0
                        maximum: 100
                      - type: 'null'
                  aiMetadata:
                    anyOf:
                      - type: object
                        propertyNames:
                          type: string
                        additionalProperties: {}
                      - type: 'null'
                  notes:
                    anyOf:
                      - type: string
                      - type: 'null'
                  resumeFileUrl:
                    anyOf:
                      - type: string
                      - type: 'null'
                  resumeFileName:
                    anyOf:
                      - type: string
                      - type: 'null'
                  coverLetterUrl:
                    anyOf:
                      - type: string
                      - type: 'null'
                  coverLetterName:
                    anyOf:
                      - type: string
                      - type: 'null'
                  followUpAt:
                    anyOf:
                      - type: string
                        format: date-time
                        x-native-type: date
                      - type: 'null'
                  followUpDateOnly:
                    type: boolean
                    description: >-
                      True for a legacy date-only follow-up. False preserves an
                      exact reminder instant, including UTC midnight.
                  followUpNote:
                    anyOf:
                      - type: string
                      - type: 'null'
                  contacts:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                          minLength: 1
                        role:
                          type: string
                          default: ''
                        type:
                          type: string
                          default: ''
                        email:
                          type: string
                          default: ''
                        phone:
                          type: string
                          default: ''
                      required:
                        - name
                  activity:
                    type: array
                    items:
                      anyOf:
                        - type: object
                          properties:
                            id:
                              type: string
                              minLength: 1
                            at:
                              type: string
                              format: date-time
                              x-native-type: date
                            type:
                              const: stage
                            stage:
                              enum:
                                - saved
                                - applied
                                - screening
                                - interview
                                - offer
                                - closed
                              type: string
                            laneId:
                              type: string
                            laneLabel:
                              anyOf:
                                - type: string
                                  maxLength: 80
                                - type: 'null'
                            closedReason:
                              anyOf:
                                - enum:
                                    - accepted
                                    - not-selected
                                    - withdrew
                                    - accepted-other
                                    - no-response
                                  type: string
                                - type: 'null'
                            canonicalTransition:
                              type: boolean
                            dateUnknown:
                              type: boolean
                            writeSequence:
                              type: integer
                              minimum: -9007199254740991
                              maximum: 9007199254740991
                              exclusiveMinimum: 0
                          required:
                            - id
                            - at
                            - type
                            - stage
                        - type: object
                          properties:
                            id:
                              type: string
                              minLength: 1
                            at:
                              type: string
                              format: date-time
                              x-native-type: date
                            type:
                              const: note
                            text:
                              type: string
                              minLength: 1
                            followedUp:
                              type: object
                              properties:
                                stageEntryId:
                                  anyOf:
                                    - type: string
                                      minLength: 1
                                    - type: 'null'
                                kind:
                                  const: reply
                              required:
                                - stageEntryId
                          required:
                            - id
                            - at
                            - type
                            - text
                        - type: object
                          properties:
                            id:
                              type: string
                              minLength: 1
                            at:
                              type: string
                              format: date-time
                              x-native-type: date
                            type:
                              const: interview
                            kind:
                              enum:
                                - screening
                                - technical
                                - behavioral
                                - onsite
                                - other
                              type: string
                            durationMinutes:
                              type: integer
                              minimum: 5
                              maximum: 1440
                              default: 60
                            location:
                              type: string
                              maxLength: 500
                              default: ''
                            notes:
                              type: string
                              maxLength: 5000
                              default: ''
                            participants:
                              type: array
                              maxItems: 20
                              items:
                                type: object
                                properties:
                                  name:
                                    type: string
                                    minLength: 1
                                    maxLength: 200
                                  role:
                                    type: string
                                    maxLength: 200
                                    default: ''
                                  profileUrl:
                                    type: string
                                    maxLength: 2048
                                    format: uri
                                required:
                                  - name
                              default: []
                            audience:
                              enum:
                                - recruiter
                                - hiring-manager
                                - practitioner
                                - panel
                                - other
                              type: string
                              default: other
                            timezone:
                              type: string
                              minLength: 1
                              maxLength: 100
                              default: UTC
                          required:
                            - id
                            - at
                            - type
                            - kind
                  trashedAt:
                    anyOf:
                      - type: string
                        format: date-time
                        x-native-type: date
                      - type: 'null'
                  appliedAt:
                    type: string
                    format: date-time
                    x-native-type: date
                  createdAt:
                    type: string
                    format: date-time
                    x-native-type: date
                  updatedAt:
                    type: string
                    format: date-time
                    x-native-type: date
                  replyVersion:
                    type: string
                    minLength: 64
                    maxLength: 64
                    description: >-
                      Opaque snapshot for logReply. Read the full application,
                      review it, then send this value as expectedVersion. On
                      CONFLICT, reload and review again.
                required:
                  - id
                  - company
                  - role
                  - location
                  - salary
                  - status
                  - closedReason
                  - resumeId
                  - coverLetterId
                  - sentResumeVersionId
                  - sentCheckScore
                  - sentCoverLetterVersionId
                  - source
                  - tags
                  - sourceUrl
                  - jobDescription
                  - postingSource
                  - requirements
                  - matchScore
                  - aiMetadata
                  - notes
                  - resumeFileUrl
                  - resumeFileName
                  - coverLetterUrl
                  - coverLetterName
                  - followUpAt
                  - followUpNote
                  - contacts
                  - activity
                  - appliedAt
                  - createdAt
                  - updatedAt
        default:
          description: >-
            Structured API error. See status and code; do not branch on message
            text.
          content:
            application/json:
              schema:
                type: object
                required:
                  - defined
                  - code
                  - status
                  - message
                properties:
                  defined:
                    type: boolean
                  code:
                    type: string
                  status:
                    type: integer
                  message:
                    type: string
                  data: {}
      security:
        - apiKey: []
        - bearerAuth: []
        - cookieAuth: []
      x-codeSamples:
        - lang: bash
          label: cURL
          source: >-
            curl --request POST
            "https://rxresu.me/api/openapi/applications/<id>/replies" --header
            "x-api-key: <api-key>" --header "Content-Type: application/json"
            --data '{
              "expectedVersion": "<string>"
            }'
components:
  securitySchemes:
    apiKey:
      type: apiKey
      name: x-api-key
      in: header
      description: The API key to authenticate requests.
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: An OAuth access token issued by this instance for its API/MCP resource.
    cookieAuth:
      type: apiKey
      in: cookie
      name: better-auth.session_token
      description: >-
        Browser session (secure deployments use the __Secure- prefix). Cookie
        requests must originate from this instance.

````

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