{
  "openapi": "3.1.0",
  "info": {
    "title": "findjobs.ge demo API",
    "version": "1.0.0",
    "description": "The real findjobs.ge code on invented data. Reads need no key. POST /api/v1/sandbox returns a token for a private company and job seeker. No mail, push or message ever leaves this demo."
  },
  "servers": [
    {
      "url": "https://demo.findjobs.ge"
    }
  ],
  "components": {
    "securitySchemes": {
      "sandbox": {
        "type": "http",
        "scheme": "bearer",
        "description": "The token from POST /api/v1/sandbox."
      }
    }
  },
  "paths": {
    "/api/v1/jobs": {
      "get": {
        "summary": "Search the sample vacancy board.",
        "operationId": "get_jobs",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Words to search for.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "city",
            "in": "query",
            "required": false,
            "description": "City key such as tbilisi or batumi.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Category key such as sales or it.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many to return, at most 50.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/jobs/{ref}": {
      "get": {
        "summary": "Read one sample vacancy with its full text.",
        "operationId": "get_jobs_by_ref",
        "parameters": [
          {
            "name": "ref",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/features": {
      "get": {
        "summary": "Everything findjobs.ge does, for job seekers and employers, and what is free or paid.",
        "operationId": "get_features",
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/pricing": {
      "get": {
        "summary": "What the paid extras cost on the real site. Posting and applying are free.",
        "operationId": "get_pricing",
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/plans": {
      "get": {
        "summary": "Exactly what Free, Pro Lite and Pro do for employers, and what Pro for job seekers does.",
        "operationId": "get_plans",
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/ask": {
      "post": {
        "summary": "Ask the assistant a question about findjobs.ge or this demo. It answers from public product facts only and holds nothing else.",
        "operationId": "post_ask",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "question": {
                    "type": "string",
                    "description": "Your question, at most 500 characters."
                  }
                },
                "required": [
                  "question"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/tour": {
      "get": {
        "summary": "The guided walk: each stop, its address, and the tip shown there.",
        "operationId": "get_tour",
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/wall": {
      "get": {
        "summary": "Live proof of the sandbox: tries the outside services and reports that each was refused.",
        "operationId": "get_wall",
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/sandbox": {
      "post": {
        "summary": "Open a private copy of a small company and a job seeker. Returns the token every other write needs. It lasts until 24 hours after its last use.",
        "operationId": "post_sandbox",
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      },
      "delete": {
        "summary": "Clear your sandbox now.",
        "operationId": "delete_sandbox",
        "security": [
          {
            "sandbox": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/employer": {
      "get": {
        "summary": "Your sample company and its plan.",
        "operationId": "get_employer",
        "security": [
          {
            "sandbox": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/employer/plan": {
      "post": {
        "summary": "Stands in for checkout: set your company to free, freeday, lite (Pro Lite) or pro, and see what each opens.",
        "operationId": "post_employer_plan",
        "security": [
          {
            "sandbox": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "plan": {
                    "type": "string",
                    "description": "The plan.",
                    "enum": [
                      "free",
                      "freeday",
                      "lite",
                      "pro"
                    ]
                  }
                },
                "required": [
                  "plan"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/employer/jobs": {
      "get": {
        "summary": "Your sample company's vacancies in every state.",
        "operationId": "get_employer_jobs",
        "security": [
          {
            "sandbox": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      },
      "post": {
        "summary": "Post a vacancy, under the site's own rules: pay must be stated. It goes live at once here and only you can see it.",
        "operationId": "post_employer_jobs",
        "security": [
          {
            "sandbox": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "description": "The job title."
                  },
                  "description": {
                    "type": "string",
                    "description": "The advert text, at least a few sentences."
                  },
                  "category": {
                    "type": "string",
                    "description": "Category key such as food, sales or it."
                  },
                  "city": {
                    "type": "string",
                    "description": "City key such as tbilisi."
                  },
                  "employment_type": {
                    "type": "string",
                    "description": "full or part."
                  },
                  "salary_min": {
                    "type": "integer",
                    "description": "Monthly pay from, GEL."
                  },
                  "salary_max": {
                    "type": "integer",
                    "description": "Monthly pay to, GEL."
                  }
                },
                "required": [
                  "title",
                  "description",
                  "category",
                  "city",
                  "employment_type",
                  "salary_min"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/employer/jobs/{id}/close": {
      "post": {
        "summary": "Close one of your vacancies. On the real site vacancies are closed, never deleted.",
        "operationId": "post_employer_jobs_by_id_close",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "sandbox": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/employer/applications": {
      "get": {
        "summary": "Your inbox. On the free plan applications stay locked, exactly as on the real site.",
        "operationId": "get_employer_applications",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "new, seen, shortlisted, rejected or hired.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many to return, at most 50.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "security": [
          {
            "sandbox": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/employer/applications/{id}": {
      "get": {
        "summary": "One application with its chat. Locked on the free plan.",
        "operationId": "get_employer_applications_by_id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "sandbox": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/employer/applications/{id}/status": {
      "post": {
        "summary": "Move an applicant: seen, shortlisted, rejected or hired.",
        "operationId": "post_employer_applications_by_id_status",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "sandbox": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "status": {
                    "type": "string",
                    "description": "The new status.",
                    "enum": [
                      "seen",
                      "shortlisted",
                      "rejected",
                      "hired"
                    ]
                  }
                },
                "required": [
                  "status"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/employer/applications/{id}/reply": {
      "post": {
        "summary": "Write to an applicant. Refused while the application is locked. The mail stops in your outbox.",
        "operationId": "post_employer_applications_by_id_reply",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {
            "sandbox": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "body": {
                    "type": "string",
                    "description": "Your message."
                  }
                },
                "required": [
                  "body"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/employer/talent": {
      "get": {
        "summary": "Search the invented Talent Index. Part of Pro.",
        "operationId": "get_employer_talent",
        "parameters": [
          {
            "name": "city",
            "in": "query",
            "required": false,
            "description": "City key.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Category key.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many to return, at most 50.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "security": [
          {
            "sandbox": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/seeker/profile": {
      "get": {
        "summary": "Your sample job seeker's profile.",
        "operationId": "get_seeker_profile",
        "security": [
          {
            "sandbox": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      },
      "patch": {
        "summary": "Change the headline or the about text. Only you can see it.",
        "operationId": "patch_seeker_profile",
        "security": [
          {
            "sandbox": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "headline": {
                    "type": "string",
                    "description": "One line."
                  },
                  "about": {
                    "type": "string",
                    "description": "A few sentences."
                  }
                },
                "required": []
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/seeker/matches": {
      "get": {
        "summary": "Vacancies ranked by the site's real fit score against your profile, with the reasons.",
        "operationId": "get_seeker_matches",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "How many to return, at most 50.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "security": [
          {
            "sandbox": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/seeker/applications": {
      "get": {
        "summary": "Where your sample job seeker's applications stand, with any replies.",
        "operationId": "get_seeker_applications",
        "security": [
          {
            "sandbox": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      },
      "post": {
        "summary": "Apply for a sample vacancy as your job seeker. Applying is always free.",
        "operationId": "post_seeker_applications",
        "security": [
          {
            "sandbox": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "job_ref": {
                    "type": "string",
                    "description": "The vacancy's ref, from /jobs."
                  },
                  "message": {
                    "type": "string",
                    "description": "A short message to the company."
                  }
                },
                "required": [
                  "job_ref",
                  "message"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    },
    "/api/v1/outbox": {
      "get": {
        "summary": "Every mail your sandbox would have sent. None of it was sent.",
        "operationId": "get_outbox",
        "security": [
          {
            "sandbox": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Needs a sandbox token"
          },
          "402": {
            "description": "Part of a paid plan: POST /api/v1/employer/plan"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Too fast"
          }
        }
      }
    }
  }
}