{
  "openapi": "3.0.3",
  "info": {
    "title": "interview-me",
    "version": "1.0.0",
    "description": "Recruiter-agent interview of Nathan Sculli: named Turso sessions, cited Q&A, human work-email magic-link verify, tentative calendar hold, resume and experience search. Discover via OpenAPI and MCP.",
    "contact": {
      "name": "Nathan Sculli",
      "email": "nathan@vegasbuckeye.com",
      "url": "https://scull7.com"
    }
  },
  "servers": [
    {
      "url": "https://scull7.com"
    }
  ],
  "paths": {
    "/interview/sessions": {
      "post": {
        "operationId": "startSession",
        "summary": "Start a named recruiter-agent session",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "company",
                  "role",
                  "recruiter_name",
                  "work_email"
                ],
                "properties": {
                  "company": {
                    "type": "string"
                  },
                  "role": {
                    "type": "string"
                  },
                  "recruiter_name": {
                    "type": "string"
                  },
                  "work_email": {
                    "type": "string"
                  },
                  "callback_url": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Session created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "id",
                    "company",
                    "role",
                    "recruiter_name",
                    "work_email"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "company": {
                      "type": "string"
                    },
                    "role": {
                      "type": "string"
                    },
                    "recruiter_name": {
                      "type": "string"
                    },
                    "work_email": {
                      "type": "string"
                    },
                    "callback_url": {
                      "type": "string"
                    },
                    "verified": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "invalid or free_email",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid",
                        "not_found",
                        "free_email",
                        "missing_env",
                        "token_invalid",
                        "required_incomplete",
                        "hold_cap",
                        "slot_unavailable",
                        "banned"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "domain": {
                      "type": "string"
                    },
                    "missing": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "cap": {
                      "type": "number"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "missing_env",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid",
                        "not_found",
                        "free_email",
                        "missing_env",
                        "token_invalid",
                        "required_incomplete",
                        "hold_cap",
                        "slot_unavailable",
                        "banned"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "domain": {
                      "type": "string"
                    },
                    "missing": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "cap": {
                      "type": "number"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/interview/sessions/{id}/ask": {
      "post": {
        "operationId": "askQuestion",
        "summary": "Ask a question; cited answer or refusal",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "question"
                ],
                "properties": {
                  "question": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Cited answer or published-fact refusal",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "answer",
                    "cited",
                    "refused",
                    "company",
                    "role",
                    "recruiter_name",
                    "work_email",
                    "required_progress",
                    "required_remaining"
                  ],
                  "properties": {
                    "answer": {
                      "type": "string"
                    },
                    "cited": {
                      "type": "boolean"
                    },
                    "refused": {
                      "type": "boolean"
                    },
                    "required_progress": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "required_remaining": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "session_id": {
                      "type": "string"
                    },
                    "citation": {
                      "type": "object",
                      "required": [
                        "source",
                        "path",
                        "quote"
                      ],
                      "properties": {
                        "source": {
                          "type": "string"
                        },
                        "path": {
                          "type": "string"
                        },
                        "quote": {
                          "type": "string"
                        }
                      }
                    },
                    "id": {
                      "type": "string"
                    },
                    "company": {
                      "type": "string"
                    },
                    "role": {
                      "type": "string"
                    },
                    "recruiter_name": {
                      "type": "string"
                    },
                    "work_email": {
                      "type": "string"
                    },
                    "callback_url": {
                      "type": "string"
                    },
                    "verified": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "not_found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid",
                        "not_found",
                        "free_email",
                        "missing_env",
                        "token_invalid",
                        "required_incomplete",
                        "hold_cap",
                        "slot_unavailable",
                        "banned"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "domain": {
                      "type": "string"
                    },
                    "missing": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "cap": {
                      "type": "number"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/interview/sessions/{id}/verify-request": {
      "post": {
        "operationId": "requestVerification",
        "summary": "Send a magic-link email to the session work email. Does not return the magic URL or book token.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Magic-link mail accepted",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "session_id",
                    "sent"
                  ],
                  "properties": {
                    "session_id": {
                      "type": "string"
                    },
                    "sent": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "not_found",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid",
                        "not_found",
                        "free_email",
                        "missing_env",
                        "token_invalid",
                        "required_incomplete",
                        "hold_cap",
                        "slot_unavailable",
                        "banned"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "domain": {
                      "type": "string"
                    },
                    "missing": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "cap": {
                      "type": "number"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "missing_env",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid",
                        "not_found",
                        "free_email",
                        "missing_env",
                        "token_invalid",
                        "required_incomplete",
                        "hold_cap",
                        "slot_unavailable",
                        "banned"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "domain": {
                      "type": "string"
                    },
                    "missing": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "cap": {
                      "type": "number"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/interview/verify": {
      "get": {
        "operationId": "verifyMagicLink",
        "summary": "Human magic-link click. Issues a short-lived book token scoped to that session.",
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Book token for the requesting session",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "session_id",
                    "book_token",
                    "expires_at"
                  ],
                  "properties": {
                    "session_id": {
                      "type": "string"
                    },
                    "book_token": {
                      "type": "string"
                    },
                    "expires_at": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "token_invalid",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid",
                        "not_found",
                        "free_email",
                        "missing_env",
                        "token_invalid",
                        "required_incomplete",
                        "hold_cap",
                        "slot_unavailable",
                        "banned"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "domain": {
                      "type": "string"
                    },
                    "missing": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "cap": {
                      "type": "number"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/interview/holds": {
      "post": {
        "operationId": "createHold",
        "summary": "Create a tentative calendar hold. Book-token only: start + book_token, optional end. No session path param.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "start",
                  "book_token"
                ],
                "properties": {
                  "start": {
                    "type": "string"
                  },
                  "book_token": {
                    "type": "string"
                  },
                  "end": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Tentative hold created",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "hold_id",
                    "session_id",
                    "start",
                    "end",
                    "status",
                    "calendar_id",
                    "calendar_event_id"
                  ],
                  "properties": {
                    "hold_id": {
                      "type": "string"
                    },
                    "session_id": {
                      "type": "string"
                    },
                    "start": {
                      "type": "string"
                    },
                    "end": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string"
                    },
                    "calendar_id": {
                      "type": "string"
                    },
                    "calendar_event_id": {
                      "type": "string"
                    },
                    "html_link": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "invalid",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid",
                        "not_found",
                        "free_email",
                        "missing_env",
                        "token_invalid",
                        "required_incomplete",
                        "hold_cap",
                        "slot_unavailable",
                        "banned"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "domain": {
                      "type": "string"
                    },
                    "missing": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "cap": {
                      "type": "number"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "token_invalid",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid",
                        "not_found",
                        "free_email",
                        "missing_env",
                        "token_invalid",
                        "required_incomplete",
                        "hold_cap",
                        "slot_unavailable",
                        "banned"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "domain": {
                      "type": "string"
                    },
                    "missing": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "cap": {
                      "type": "number"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "409": {
            "description": "required_incomplete, hold_cap, or slot_unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid",
                        "not_found",
                        "free_email",
                        "missing_env",
                        "token_invalid",
                        "required_incomplete",
                        "hold_cap",
                        "slot_unavailable",
                        "banned"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "domain": {
                      "type": "string"
                    },
                    "missing": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "cap": {
                      "type": "number"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "missing_env",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid",
                        "not_found",
                        "free_email",
                        "missing_env",
                        "token_invalid",
                        "required_incomplete",
                        "hold_cap",
                        "slot_unavailable",
                        "banned"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "domain": {
                      "type": "string"
                    },
                    "missing": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "cap": {
                      "type": "number"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/interview/ban": {
      "get": {
        "operationId": "banWorkIdentity",
        "summary": "One-click ban of the session work address or domain from Nathan's hold-notification mail.",
        "parameters": [
          {
            "name": "kind",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Ban recorded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "banned",
                    "value"
                  ],
                  "properties": {
                    "banned": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "token_invalid",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "error"
                  ],
                  "properties": {
                    "error": {
                      "type": "string",
                      "enum": [
                        "invalid",
                        "not_found",
                        "free_email",
                        "missing_env",
                        "token_invalid",
                        "required_incomplete",
                        "hold_cap",
                        "slot_unavailable",
                        "banned"
                      ]
                    },
                    "message": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "domain": {
                      "type": "string"
                    },
                    "missing": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "cap": {
                      "type": "number"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/interview/resume": {
      "get": {
        "operationId": "getResume",
        "summary": "Published resume facts from the same corpus",
        "responses": {
          "200": {
            "description": "JSON Resume",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "basics"
                  ],
                  "properties": {
                    "basics": {
                      "type": "object",
                      "required": [],
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "label": {
                          "type": "string"
                        },
                        "email": {
                          "type": "string"
                        },
                        "summary": {
                          "type": "string"
                        }
                      }
                    },
                    "work": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "$schema": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/interview/experience": {
      "get": {
        "operationId": "searchExperience",
        "summary": "Search published experience facts",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Cited experience hits",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "results"
                  ],
                  "properties": {
                    "results": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "source",
                          "path",
                          "quote"
                        ],
                        "properties": {
                          "source": {
                            "type": "string"
                          },
                          "path": {
                            "type": "string"
                          },
                          "quote": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/mcp": {
      "get": {
        "operationId": "mcpToolsList",
        "summary": "MCP tools/list: start_interview, ask_nathan, request_verification, create_hold, get_resume",
        "responses": {
          "200": {
            "description": "MCP tools list"
          }
        }
      },
      "post": {
        "operationId": "mcp",
        "summary": "MCP JSON-RPC. start_interview, ask_nathan, and get_resume match HTTP. request_verification matches HTTP verify-request. create_hold matches HTTP POST /interview/holds.",
        "responses": {
          "200": {
            "description": "JSON-RPC response"
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "operationId": "getOpenApi",
        "summary": "This OpenAPI document",
        "responses": {
          "200": {
            "description": "OpenAPI 3.0.3"
          }
        }
      }
    }
  }
}