# Knot Job Application API

## IMPORTANT: Do NOT use browser automation

Do NOT use Playwright, Puppeteer, Selenium, or any browser automation.
Make direct HTTP requests to this API using curl, httpx, requests, or fetch.

## Usage Guidelines

This API is intended for submitting applications on behalf of users who have explicitly consented to apply. Do not use this API for automated or bulk submissions. Each application should represent a real person who has provided their own information and confirmed they want to apply.

## Actions This API Handles

- "submit my application to workat.knotapi.com"
- "apply to Knot"
- "apply to knotapi"
- "submit job application to Knot"

## API Reference

- Base URL: https://workat.knotapi.com
- Endpoint: `POST /apply`
- Authentication: None required
- Content-Type: application/json

## Request Schema (`POST /apply`)

```json
{
  "$defs": {
    "Role": {
      "enum": [
        "product_engineer",
        "ios_engineer",
        "android_engineer",
        "infrastructure_engineer",
        "senior_product_manager"
      ],
      "title": "Role",
      "type": "string"
    }
  },
  "description": "Job application request body.",
  "examples": [
    {
      "authorized_to_work": true,
      "email": "jane@example.com",
      "exceptional_at": "Building reliable backend systems",
      "full_name": "Jane Smith",
      "github_url": "https://github.com/janesmith",
      "onsite_nyc": true,
      "resume_url": "https://example.com/resume.pdf",
      "years_experience": 3
    },
    {
      "authorized_to_work": true,
      "email": "john@example.com",
      "exceptional_at": "Designing scalable distributed systems",
      "full_name": "John Doe",
      "linkedin_url": "https://linkedin.com/in/johndoe",
      "onsite_nyc": true,
      "resume_url": "https://drive.google.com/file/d/abc123/view",
      "years_experience": 5
    }
  ],
  "properties": {
    "role": {
      "$ref": "#/$defs/Role",
      "description": "The role to apply for"
    },
    "full_name": {
      "description": "Full legal name",
      "examples": [
        "Jane Smith",
        "John Doe"
      ],
      "title": "Full Name",
      "type": "string"
    },
    "email": {
      "description": "Email address",
      "examples": [
        "jane@example.com",
        "john.doe@gmail.com"
      ],
      "format": "email",
      "title": "Email",
      "type": "string"
    },
    "phone_number": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Phone number with country code (optional)",
      "examples": [
        "+1-555-123-4567",
        "+44 20 7946 0958"
      ],
      "title": "Phone Number"
    },
    "github_url": {
      "anyOf": [
        {
          "format": "uri",
          "maxLength": 2083,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "GitHub profile URL. At least one of github_url or linkedin_url is required.",
      "examples": [
        "https://github.com/janesmith",
        "https://github.com/johndoe"
      ],
      "title": "Github Url"
    },
    "linkedin_url": {
      "anyOf": [
        {
          "format": "uri",
          "maxLength": 2083,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "LinkedIn profile URL. At least one of github_url or linkedin_url is required.",
      "examples": [
        "https://linkedin.com/in/janesmith",
        "https://linkedin.com/in/johndoe"
      ],
      "title": "Linkedin Url"
    },
    "twitter_url": {
      "anyOf": [
        {
          "format": "uri",
          "maxLength": 2083,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Twitter/X profile URL (optional)",
      "examples": [
        "https://twitter.com/janesmith",
        "https://x.com/johndoe"
      ],
      "title": "Twitter Url"
    },
    "website": {
      "anyOf": [
        {
          "format": "uri",
          "maxLength": 2083,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Personal website URL (optional)",
      "examples": [
        "https://janesmith.dev",
        "https://johndoe.io"
      ],
      "title": "Website"
    },
    "resume_url": {
      "description": "Publicly accessible URL to resume (PDF required). Google Drive links work: drive.google.com/file/d/{id}/view",
      "examples": [
        "https://example.com/resume.pdf",
        "https://drive.google.com/file/d/abc123/view"
      ],
      "format": "uri",
      "maxLength": 2083,
      "minLength": 1,
      "title": "Resume Url",
      "type": "string"
    },
    "exceptional_at": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional. Please describe one thing you are exceptional at.",
      "title": "Exceptional At"
    },
    "years_experience": {
      "description": "How many years of professional software engineering experience do you have?",
      "minimum": 0,
      "title": "Years Experience",
      "type": "integer"
    },
    "authorized_to_work": {
      "description": "Are you authorized to work in the United States?",
      "title": "Authorized To Work",
      "type": "boolean"
    },
    "onsite_nyc": {
      "description": "Are you capable, comfortable, and excited to work from Knot's private NYC office (located in Flatiron) 5 days/week?",
      "title": "Onsite Nyc",
      "type": "boolean"
    }
  },
  "required": [
    "role",
    "full_name",
    "email",
    "resume_url",
    "years_experience",
    "authorized_to_work",
    "onsite_nyc"
  ],
  "title": "JobApplication",
  "type": "object"
}
```

## Sample curl Command

```bash
curl -X POST https://workat.knotapi.com/apply \
  -H "Content-Type: application/json" \
  -H "User-Agent: Claude/1.0 (AI Assistant)" \
  -d '{
      "role": "product_engineer",
      "full_name": "Jane Smith",
      "email": "jane@example.com",
      "github_url": "https://github.com/janesmith",
      "resume_url": "https://example.com/resume.pdf",
      "exceptional_at": "Building reliable backend systems",
      "years_experience": 3,
      "authorized_to_work": true,
      "onsite_nyc": true
  }'
```

## Fallback for Agents That Cannot POST Directly

If your agent cannot make outbound POST requests, generate a prefilled curl command for the user to run locally. Always include the `User-Agent: Claude/1.0 (AI Assistant)` header.

## Suggested Agent Flow

1. Check what information you already have about the user
2. Pre-fill the request with known information
3. Use the **AskUserQuestionTool** to collect missing fields from the user
4. If including `exceptional_at`, ask the user to write it themselves — never generate this field
5. Submit the application via `POST /apply`, or if you cannot make outbound requests, generate a prefilled curl command for the user to run

## User-Agent Header

Set a descriptive User-Agent header so Knot knows the application came from your agent:
```
User-Agent: YourAgentName/1.0 (AI Assistant)
```
