Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

3.5K
Views
Python: FastAPI 422 Unprocessable Entity error

When I use GET request to send data to the server it works fine, but when use POST request it throws "422 Unprocessable Entity" error.

This is my Ajax request code:

var newName = "Bhanuka"; 
//do your own request an handle the results
$.ajax({
  type: "post",
  url: "/names/",
  data: {d:newName},
  dataType: 'json', 
  success: function(data){ 
     console.log(data);
  }
});

and this is my FastAPI server side code:

from fastapi import FastAPI, Request,Body
from pydantic import BaseModel

from fastapi.templating import Jinja2Templates
from fastapi.encoders import jsonable_encoder
app = FastAPI()

templates = Jinja2Templates(directory="templates")

@app.get("/items/{id}")
async def read_item(request: Request, id: str):
    return templates.TemplateResponse("item.html", {"request": request, "id": id})

@app.post("/names/")
async def create_item(d:str):
    return d

@app.get("/items11/{item_id}")
def read_item22(item_id: int, q: str ):
    return {"item_id": item_id, "q": q}
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

It is because the data you are sending is json. and the POST request api is expecting str.

If the formats doesn't match during the api calls, it raises the Unprocessable Entity error.

You can deal it using

  1. requests
  2. pydantic

Well, coming to the first case, 1.Request: you can use request with curl

curl -i -d "param1=value1&param2=value2" http://localhost:8000/check

to the below code for example:

from fastapi import FastAPI, Request
from fastapi.encoders import jsonable_encoder

app = FastAPI()

@app.post('/check')
async def check(request: Request):
    da = await request.form()
    da = jsonable_encoder(da)
    print(da)
    return da
  1. Pydantics as mentioned in @kamal's answer
over 4 years ago · Santiago Trujillo Report

0

A function parameters can be defined as in 3 types like path , singular types and model. Here you call the method using a JSON body and therefore it is likely a model parameter. Therefore in your code , define your input parameter as a model parameter.

Example -

from pydantic import BaseModel 
from fastapi import FastAPI

app = FastAPI()

class Data(BaseModel):
    user: str

@app.post("/names/") 
def main(input: Data):
    return input

Then you can call this as

  $.ajax({
         type: "post",
         url: "/names/",
         data: "{'user':'kamal'}",
         contentType: "application/json",  
         dataType: 'json', 
         success: function(data)
         { console.log(data); 

         }});
over 4 years ago · Santiago Trujillo Report

0

In short, the endpoint (/names/) in your API - in the way that is defined - expects a string query parameter d, but your client (Ajax request) sends JSON payload. Hence, the 422 Unprocessable Entity error. To receive the data in JSON format, one needs to create a Pydantic BaseModel as follows:

server side

class Data(BaseModel):
    name: str
    
@app.post("/names/") 
def create_item(data: Data):
    recv_data = data.dict()
    return recv_data['name']

Alternatively, one could use the Body(...) field - and if only a single body parameter is required, use Body(..., embed=True) instead, as shown below:

@app.post("/names/") 
def create_item(name: str = Body(..., embed=True)):
    return name

The client should then look like this (no matter which of the above you use):

client side

$.ajax({
    type: "post",
    url: "/names/",
    data: '{"name": "Bhanuka"}',
    contentType: "application/json",
    dataType: 'json',
    success: function(data) {
        console.log(data);
    }
});
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!