Python API POST Request Example
This example shows how to send a POST request in Python, send data to an API, and read the response.
The goal is to give you one simple working example you can run right away. If you want a more general guide later, see how to send a POST request in Python or how to make an API request in Python.
Quick example
import requests
url = "https://httpbin.org/post"
payload = {
"name": "Alice",
"age": 25
}
response = requests.post(url, json=payload)
print(response.status_code)
print(response.json())
This sends JSON data to a test API and prints the status code and returned JSON.
Install requests first:
pip install requests
What this example shows
- How to send a POST request with Python
- How to send data as JSON
- How to read the server response
- How to check whether the request worked
Before you run the code
Make sure:
- Python is installed
- The
requestspackage is installed withpip - You use a safe test endpoint like
https://httpbin.org/post
A POST request is often used when you want to send new data to an API. For example, you might create a user, submit a form, or send a message.
Useful commands:
python --version
pip install requests
pip show requests
Basic POST request example
Here is the same example again with a little more context:
import requests
url = "https://httpbin.org/post"
payload = {
"name": "Alice",
"age": 25
}
response = requests.post(url, json=payload)
print("Status code:", response.status_code)
print("Response JSON:")
print(response.json())
Example output
Status code: 200
Response JSON:
{
"args": {},
"data": "{\"name\": \"Alice\", \"age\": 25}",
"files": {},
"form": {},
"headers": {
...
},
"json": {
"age": 25,
"name": "Alice"
},
"url": "https://httpbin.org/post"
}
The exact output may look a little different, but you should see:
- A status code such as
200 - Your sent data inside the returned JSON
How the key lines work
requests.post()
response = requests.post(url, json=payload)
This sends a POST request to the server.
urlis the API endpointjson=payloadsends your Python dictionary as JSON
If you are new to JSON, see the Python json module overview.
json=payload
payload = {
"name": "Alice",
"age": 25
}
This is a normal Python dictionary.
When you pass it with json=payload, requests converts it to JSON automatically before sending it.
If you need to convert Python data to a JSON string yourself, see json.dumps() explained.
response.status_code
print(response.status_code)
This shows the HTTP status code from the server.
It helps you check whether the request worked.
response.json()
print(response.json())
This converts the JSON response into a Python object, usually a dictionary.
If you need to parse a JSON string manually, see json.loads() explained.
Common response checks
When working with APIs, these status codes are common:
200or201usually means success400level codes usually mean your request has a problem500level codes usually mean the server has a problem
A simple pattern is:
import requests
url = "https://httpbin.org/post"
payload = {"name": "Alice", "age": 25}
response = requests.post(url, json=payload)
print("Status code:", response.status_code)
if response.status_code in (200, 201):
print("Request worked")
print(response.json())
else:
print("Request failed")
print(response.text)
When debugging, always inspect the response body. It often tells you what went wrong.
You can also read more in how to handle API responses in Python.
Common beginner problems
Here are some common causes of trouble:
requestsis not installed- The URL or endpoint is wrong
- You send form data when the API expects JSON
- You try to parse JSON when the response is not actually JSON
- You forget to handle network errors
- The API requires authentication headers or a token
More specifically:
ModuleNotFoundErrorcan happen ifrequestsis missing. See how to fix ModuleNotFoundError: No module named x.- A
400response often means the server did not like your data format. - Connection errors often mean the URL is wrong or your network is down.
- JSON parsing can fail if the server returns plain text or HTML instead of JSON.
- Some APIs require login tokens, API keys, or headers.
One more beginner tip: when reading response data, make sure the key exists before using it. This helps avoid errors like KeyError in Python.
Safer version with error handling
This version is better for real programs because it handles common problems more safely.
import requests
url = "https://httpbin.org/post"
payload = {
"name": "Alice",
"age": 25
}
try:
response = requests.post(url, json=payload, timeout=10)
response.raise_for_status()
print("Status code:", response.status_code)
content_type = response.headers.get("Content-Type", "")
if "application/json" in content_type:
data = response.json()
print("JSON response:")
print(data)
else:
print("Response is not JSON:")
print(response.text)
except requests.exceptions.RequestException as e:
print("Request failed:", e)
What this safer version does
- Wraps the request in
try-except - Catches network and request errors
- Uses
raise_for_status()to catch bad HTTP status codes - Checks the response type before calling
response.json() - Adds a
timeoutso the program does not wait forever
FAQ
What is a POST request in Python?
It is a request that sends data to a server, often to create or submit something.
Should I use data= or json= in requests.post()?
Use json= when the API expects JSON. Use data= for form-style data.
Why use httpbin.org in the example?
It is a simple test service that shows back the data you sent.
What does response.status_code mean?
It is the HTTP status code that tells you whether the request succeeded or failed.
Why does response.json() fail sometimes?
It fails when the server response is not valid JSON.
See also
- How to send a POST request in Python
- How to make an API request in Python
- How to handle API responses in Python
- Python json module overview
json.loads()function explainedjson.dumps()function explained
If this copy-paste example works for you, the next step is learning how requests, JSON data, and response debugging fit together in a real API workflow.