Back to Developer's Study Materials

How to Post JSON Data Using cURL: Complete Guide 2026

Step-by-Step Guide for POST Requests with JSON Payloads, Headers, and Authentication

Definition: What Is Posting JSON Data Using cURL?

Posting JSON data using cURL refers to the process of sending HTTP POST requests to web APIs with JSON (JavaScript Object Notation) data in the request body using the cURL command-line tool. This is a fundamental operation in API testing, integration, and automation, allowing developers to send structured data to REST APIs from the command line.

cURL (Client URL) is a command-line tool available on Linux, macOS, Windows, and most Unix-like systems. It supports various protocols, but is most commonly used for HTTP/HTTPS requests. When posting JSON data, cURL sends the JSON string in the HTTP request body, typically with the `Content-Type: application/json` header to indicate the data format.

The process involves: specifying the HTTP method (POST), setting the appropriate headers (especially Content-Type), including the JSON data in the request body, and optionally adding authentication headers. cURL provides several ways to include JSON data: inline JSON strings, reading from files, or using environment variables.

Posting JSON with cURL is essential for API testing, automation scripts, CI/CD pipelines, and command-line workflows. It's faster than using GUI tools, scriptable, and doesn't require additional dependencies beyond cURL itself.

Key Point: Posting JSON data using cURL means sending HTTP POST requests with JSON payloads from the command line. It requires the `-X POST` flag, `Content-Type: application/json` header, and JSON data in the request body. Essential for API testing, automation, and integration workflows.

What: Understanding cURL POST with JSON

Let's understand the components of posting JSON data with cURL:

HTTP POST Method

POST is an HTTP method used to send data to a server to create or update resources. Unlike GET requests, POST requests include data in the request body, making them suitable for sending JSON payloads.

cURL flag: -X POST or --request POST

Content-Type Header

The `Content-Type: application/json` header tells the server that the request body contains JSON data. Without this header, many APIs won't parse the JSON correctly or will reject the request.

cURL flag: -H "Content-Type: application/json"

JSON Data

The JSON data is sent in the HTTP request body. It can be provided inline as a string, read from a file, or constructed dynamically. The JSON must be valid and properly formatted.

cURL flag: -d '{"key":"value"}' or -d @file.json

Authentication

Many APIs require authentication. Common methods include Bearer tokens, API keys, or Basic authentication. These are added as headers in the cURL request.

cURL flag: -H "Authorization: Bearer TOKEN"

Basic cURL POST JSON Structure

$ curl -X POST \

-H "Content-Type: application/json" \

-d '{"key": "value"}' \

"https://api.example.com/endpoint"

1.-X POST: Specifies HTTP POST method
2.-H "Content-Type: application/json": Sets JSON content type header
3.-d '{"key": "value"}: Includes JSON data in request body
4.URL: The API endpoint to send the request to

When: When to Post JSON Data Using cURL

Posting JSON data using cURL is ideal in these scenarios:

✅ API Testing and Development

Use cURL POST when testing API endpoints during development. It's faster than opening Postman or writing test scripts. You can quickly test different JSON payloads, headers, and authentication methods.

Example: Testing new API endpoints, verifying request/response formats, debugging API issues, validating JSON schemas

✅ Automation Scripts and CI/CD

Use cURL POST in bash scripts, automation workflows, and CI/CD pipelines. It's lightweight, doesn't require additional dependencies, and integrates well with other command-line tools.

Example: Automated API testing, data synchronization, webhook triggers, deployment scripts, health checks

✅ Command-Line Workflows

Use cURL POST when working from the command line or terminal. It's perfect for developers who prefer CLI tools, work in remote servers, or need to integrate with shell scripts.

Example: Remote server administration, SSH workflows, terminal-based development, quick API calls

✅ Data Submission and Integration

Use cURL POST when submitting data to APIs, creating resources, or integrating with third-party services. It's reliable, well-supported, and works across all platforms.

Example: Creating records via API, submitting forms programmatically, webhook payloads, API integrations

✅ Quick API Exploration

Use cURL POST when quickly exploring APIs, testing endpoints, or understanding API behavior. It's faster than GUI tools and provides immediate feedback.

Example: API documentation testing, endpoint discovery, response format exploration, quick API validation

How: Step-by-Step Guide to Posting JSON with cURL

Here's a comprehensive step-by-step guide to posting JSON data using cURL:

1

Basic POST Request with Inline JSON

Start with a simple POST request with JSON data inline:

$ curl -X POST -H "Content-Type: application/json" -d '{"name":"John","age":30}' "https://api.example.com/users"

Key points: Use single quotes around JSON to avoid shell interpretation, include Content-Type header, use -X POST flag

2

POST JSON from a File

For complex JSON or reusable data, read from a file:

# Create data.json file

echo '{"name":"John","age":30}' > data.json

# Post from file

$ curl -X POST -H "Content-Type: application/json" -d @data.json "https://api.example.com/users"

Benefit: Easier to manage complex JSON, reusable across multiple requests, avoids shell escaping issues

3

Add Authentication Headers

Include authentication in your POST request:

# Bearer token authentication

$ curl -X POST \

-H "Content-Type: application/json" \

-H "Authorization: Bearer YOUR_TOKEN" \

-d '{"name":"John"}' \

"https://api.example.com/users"

4

Handle Special Characters

Escape special characters properly or use --data-raw:

# Using --data-raw (recommended for complex JSON)

$ curl -X POST \

-H "Content-Type: application/json" \

--data-raw '{"name":"John\'s Data","value":"test"}' \

"https://api.example.com/endpoint"

5

View Response Headers and Body

Include response headers and format output:

# Include response headers

$ curl -X POST -i -H "Content-Type: application/json" -d '{"name":"John"}' "https://api.example.com/users"

# Pretty print JSON response (if jq installed)

$ curl -X POST -H "Content-Type: application/json" -d '{"name":"John"}' "https://api.example.com/users" | jq

6

Error Handling and Debugging

Use verbose mode and check HTTP status codes:

# Verbose mode (shows request/response details)

$ curl -v -X POST -H "Content-Type: application/json" -d '{"name":"John"}' "https://api.example.com/users"

# Show only HTTP status code

$ curl -s -o /dev/null -w "%{http_code}" -X POST -H "Content-Type: application/json" -d '{"name":"John"}' "https://api.example.com/users"

Common cURL POST JSON Patterns

Pattern 1: Simple POST

curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' "URL"

Pattern 2: POST with Authentication

curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer TOKEN" -d '{"key":"value"}' "URL"

Pattern 3: POST from File

curl -X POST -H "Content-Type: application/json" -d @data.json "URL"

Pattern 4: POST with Multiple Headers

curl -X POST -H "Content-Type: application/json" -H "X-API-Key: KEY" -H "X-Request-ID: ID" -d '{"key":"value"}' "URL"

Why: Benefits of Posting JSON with cURL

Posting JSON data using cURL offers several significant benefits:

Fast and Efficient

cURL is extremely fast and lightweight. It doesn't require GUI applications or heavy dependencies. You can make API requests instantly from the command line without waiting for applications to load.

Impact: Faster API testing, immediate results, minimal resource usage

Scriptable and Automatable

cURL is perfect for automation. It works seamlessly in bash scripts, can be integrated into CI/CD pipelines, and can be combined with other command-line tools. This makes it ideal for automated testing and workflows.

Impact: Automate API testing, integrate into workflows, reduce manual work

Cross-Platform

cURL works on Linux, macOS, Windows (with WSL or Git Bash), and most Unix-like systems. This cross-platform compatibility means you can use the same commands across different environments.

Impact: Consistent workflows across platforms, easy team collaboration, portable scripts

No Dependencies

cURL comes pre-installed on most systems and doesn't require additional dependencies. You don't need to install Python, Node.js, or any other runtime. Just use cURL directly.

Impact: Works out of the box, no setup required, minimal system requirements

Best Practices for Posting JSON with cURL

✅ Do's

  • Always include Content-Type: application/json header
  • Use single quotes around JSON strings to avoid shell interpretation
  • Use -d @file.json for complex JSON data
  • Validate JSON syntax before sending (use a JSON validator)
  • Use -v flag for debugging
  • Store sensitive data (tokens, keys) in environment variables

❌ Don'ts

  • Don't forget the Content-Type header - APIs need it to parse JSON
  • Don't use double quotes around JSON in bash - use single quotes or escape properly
  • Don't hardcode sensitive credentials - use environment variables
  • Don't send invalid JSON - validate syntax first
  • Don't ignore HTTP status codes - check for errors (200, 201, 400, 401, etc.)
  • Don't use -X POST without -d - you need data for POST

Real-World Examples

Example 1: Create User via API

$ curl -X POST \

-H "Content-Type: application/json" \

-H "Authorization: Bearer $TOKEN" \

-d '{"name":"John Doe","email":"john@example.com","age":30}' \

"https://api.example.com/users"

This example creates a new user by posting JSON data with authentication. The token is stored in an environment variable for security.

Example 2: POST from JSON File

# data.json contains: {"name":"John","data":"value"}

$ curl -X POST -H "Content-Type: application/json" -d @data.json "https://api.example.com/endpoint"

This example reads JSON from a file, making it easier to manage complex data structures and reuse across multiple requests.

Example 3: POST with API Key

$ curl -X POST \

-H "Content-Type: application/json" \

-H "X-API-Key: $API_KEY" \

-d '{"action":"create","data":{"key":"value"}}' \

"https://api.example.com/actions"

This example uses API key authentication with nested JSON data, demonstrating how to structure complex payloads.

Share this article with Your Friends, Collegue and Team mates

Stay Updated

Get the latest tool updates, new features, and developer tips delivered to your inbox.

No spam. Unsubscribe anytime. We respect your privacy.

Share Your Feedback

Help us improve! Share your thoughts, report bugs, or suggest new features.

Get in Touch

We'd love to hear from you! Write us for any additional feature request, issues, query or appreciation.

Your feedback helps us improve and build better tools for the developer community.