> ## Documentation index
> Fetch the complete documentation index at: https://docs.rxresu.me/llms.txt
> Ask it with GET https://docs.rxresu.me/ask?q=<keywords or question>. Short keywords rank best.
> Use these to discover all available pages before exploring further.

# Read a job posting

> Reads a job link or pasted posting text into role, company, location, salary and requirements, and returns the posting text to save with the application. Links must be public https pages. Without an AI provider, only a page's own job data (JSON-LD) fills the fields. Requires authentication.

`POST /applications/ai/posting-parses`

## OpenAPI

````yaml spec.json post /applications/ai/posting-parses
openapi: 3.1.1
info:
  title: Reactive Resume
  version: 6.0.7
  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: []
paths:
  /applications/ai/posting-parses:
    post:
      operationId: createPostingParse
      summary: Read a job posting
      description: Reads a job link or pasted posting text into role, company,
        location, salary and requirements, and returns the posting text to save
        with the application. Links must be public https pages. Without an AI
        provider, only a page's own job data (JSON-LD) fills the fields.
        Requires authentication.
      tags:
        - Applications
        - AI
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                input:
                  type: string
                  minLength: 1
                  maxLength: 100000
              required:
                - input
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  role:
                    type: string
                  company:
                    type: string
                  location:
                    type: string
                  salary:
                    type: string
                  requirements:
                    type: array
                    items:
                      type: string
                    description: What the posting asks for, one short item each.
                  jobDescription:
                    type: string
                    description: The posting's text, to save with the application.
                  sourceUrl:
                    anyOf:
                      - type: string
                      - type: "null"
                    description: The link, when a link was given.
                  postingSource:
                    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
                      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
                  enrichmentWarning:
                    anyOf:
                      - enum:
                          - ai-unavailable
                        type: string
                      - type: "null"
                  filledBy:
                    enum:
                      - ai
                      - page
                      - none
                    type: string
                    description: "What filled the fields: the AI provider, the page's own job data,
                      or nothing (fill them in)."
                required:
                  - role
                  - company
                  - location
                  - salary
                  - requirements
                  - jobDescription
                  - sourceUrl
                  - postingSource
                  - enrichmentWarning
                  - filledBy
        "400":
          description: "400"
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: BAD_REQUEST
                      status:
                        const: 400
                      message:
                        type: string
                        default: The application or AI request isn't valid. Check the details and try
                          again.
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
        "422":
          description: "422"
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: POSTING_UNREADABLE
                      status:
                        const: 422
                      message:
                        type: string
                        default: That link couldn't be read. Paste the posting text instead.
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
        "429":
          description: "429"
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: RATE_LIMIT_EXCEEDED
                      status:
                        const: 429
                      message:
                        type: string
                        default: Too many web requests. Try again later.
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
        "502":
          description: "502"
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: BAD_GATEWAY
                      status:
                        const: 502
                      message:
                        type: string
                        default: The AI provider returned an error or couldn't be reached. Try again, or
                          check its settings.
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
        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/ai/posting-parses"
            --header "x-api-key: <api-key>" --header "Content-Type:
            application/json" --data '{
              "input": "<string>"
            }'
components:
  securitySchemes:
    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.
    apiKey:
      type: apiKey
      name: x-api-key
      in: header
      description: The API key to authenticate requests.
````
