API Endpoints
Base URL: https://api.sheetsjson.com
All endpoints require authentication via API key when the sheet has require_api_key enabled.
Reading Data
Get Sheet Data
Fetch all rows from a sheet.
GET /api/sheets/:account_slug/:sheet_slug
Parameters
|
Parameter |
Type |
Description |
account_slug |
string |
Your account slug or UUID |
sheet_slug |
string |
The sheet’s slug or custom API slug |
See Query Parameters for filtering, sorting, and pagination options.
Code Examples
```bash
# Basic request
curl "https://api.sheetsjson.com/api/sheets/your-account/products" \
-H "Authorization: Bearer YOUR_API_KEY"
# With query parameters
curl "https://api.sheetsjson.com/api/sheets/your-account/products?limit=10&sort=-price" \
-H "Authorization: Bearer YOUR_API_KEY"
# With filtering
curl "https://api.sheetsjson.com/api/sheets/your-account/products?filter[category]=Electronics&filter[price][lte]=100" \
-H "Authorization: Bearer YOUR_API_KEY"
```
```javascript
// Using fetch API
const response = await fetch(
'https://api.sheetsjson.com/api/sheets/your-account/products',
{
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
const data = await response.json();
console.log(data);
// With query parameters
const url = new URL('https://api.sheetsjson.com/api/sheets/your-account/products');
url.searchParams.set('limit', '10');
url.searchParams.set('sort', '-price');
url.searchParams.set('filter[category]', 'Electronics');
const filteredResponse = await fetch(url, {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
// Using async/await with error handling
async function fetchProducts() {
try {
const response = await fetch(
'https://api.sheetsjson.com/api/sheets/your-account/products',
{ headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('Failed to fetch products:', error);
throw error;
}
}
```
```python
import requests
# Basic request
response = requests.get(
'https://api.sheetsjson.com/api/sheets/your-account/products',
headers={'Authorization': 'Bearer YOUR_API_KEY'}
)
data = response.json()
print(data)
# With query parameters
params = {
'limit': 10,
'sort': '-price',
'filter[category]': 'Electronics',
'filter[price][lte]': 100
}
response = requests.get(
'https://api.sheetsjson.com/api/sheets/your-account/products',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
params=params
)
products = response.json()
# With error handling
def fetch_products():
try:
response = requests.get(
'https://api.sheetsjson.com/api/sheets/your-account/products',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
timeout=30
)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f'Failed to fetch products: {e}')
raise
```
Response
{
"data": [
{
"id": "1",
"name": "Widget A",
"price": "29.99",
"category": "Electronics"
},
{
"id": "2",
"name": "Widget B",
"price": "49.99",
"category": "Electronics"
}
],
"meta": {
"total": 2,
"limit": 100,
"offset": 0,
"has_more": false
}
}
Get Single Row
Fetch a single row by its row number or ID.
GET /api/sheets/:account_slug/:sheet_slug?filter[id]=:id
Code Examples
```bash
# Filter by ID field
curl "https://api.sheetsjson.com/api/sheets/your-account/products?filter[id]=1&limit=1" \
-H "Authorization: Bearer YOUR_API_KEY"
```
```javascript
async function getProductById(id) {
const url = new URL('https://api.sheetsjson.com/api/sheets/your-account/products');
url.searchParams.set('filter[id]', id);
url.searchParams.set('limit', '1');
const response = await fetch(url, {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
const data = await response.json();
return data.data[0] || null;
}
const product = await getProductById('1');
console.log(product);
```
```python
def get_product_by_id(product_id):
response = requests.get(
'https://api.sheetsjson.com/api/sheets/your-account/products',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
params={
'filter[id]': product_id,
'limit': 1
}
)
data = response.json()
return data['data'][0] if data['data'] else None
product = get_product_by_id('1')
print(product)
```
Response
{
"data": [
{
"id": "1",
"name": "Widget A",
"price": "29.99",
"category": "Electronics"
}
],
"meta": {
"total": 1,
"limit": 1,
"offset": 0,
"has_more": false
}
}
Writing Data
Note: Write operations require a Pro plan or higher. See Write API for complete documentation.
Create Row(s)
Append one or more rows to the sheet.
POST /api/sheets/:account_slug/:sheet_slug
Code Examples
```bash
# Add a single row
curl -X POST "https://api.sheetsjson.com/api/sheets/your-account/products" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "New Product", "price": "29.99", "category": "Electronics"}'
# Add multiple rows
curl -X POST "https://api.sheetsjson.com/api/sheets/your-account/products" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '[{"name": "Product A", "price": "19.99"}, {"name": "Product B", "price": "39.99"}]'
```
```javascript
// Add a single row
const response = await fetch(
'https://api.sheetsjson.com/api/sheets/your-account/products',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'New Product',
price: '29.99',
category: 'Electronics'
})
}
);
const result = await response.json();
// { success: true, message: "1 row(s) added", rows_added: 1 }
```
```python
# Add a single row
response = requests.post(
'https://api.sheetsjson.com/api/sheets/your-account/products',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'name': 'New Product',
'price': '29.99',
'category': 'Electronics'
}
)
result = response.json()
# {'success': True, 'message': '1 row(s) added', 'rows_added': 1}
```
Update Row
Update an existing row by row number.
PUT /api/sheets/:account_slug/:sheet_slug/:row_number
Code Examples
```bash
# Update row 5
curl -X PUT "https://api.sheetsjson.com/api/sheets/your-account/products/5" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"price": "34.99", "in_stock": "true"}'
```
```javascript
const rowNumber = 5;
const response = await fetch(
`https://api.sheetsjson.com/api/sheets/your-account/products/${rowNumber}`,
{
method: 'PUT',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
price: '34.99',
in_stock: 'true'
})
}
);
const result = await response.json();
// { success: true, message: "Row 5 updated", row: 5 }
```
```python
row_number = 5
response = requests.put(
f'https://api.sheetsjson.com/api/sheets/your-account/products/{row_number}',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={
'price': '34.99',
'in_stock': 'true'
}
)
result = response.json()
# {'success': True, 'message': 'Row 5 updated', 'row': 5}
```
Delete Row
Delete a row by row number.
DELETE /api/sheets/:account_slug/:sheet_slug/:row_number
Code Examples
```bash
# Delete row 5
curl -X DELETE "https://api.sheetsjson.com/api/sheets/your-account/products/5" \
-H "Authorization: Bearer YOUR_API_KEY"
```
```javascript
const rowNumber = 5;
const response = await fetch(
`https://api.sheetsjson.com/api/sheets/your-account/products/${rowNumber}`,
{
method: 'DELETE',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
const result = await response.json();
// { success: true, message: "Row 5 deleted", row: 5 }
```
```python
row_number = 5
response = requests.delete(
f'https://api.sheetsjson.com/api/sheets/your-account/products/{row_number}',
headers={'Authorization': 'Bearer YOUR_API_KEY'}
)
result = response.json()
# {'success': True, 'message': 'Row 5 deleted', 'row': 5}
```
Response Format
Success Response
All successful responses include a data field with the requested data:
{
"data": [...],
"meta": {
"total": 100,
"limit": 10,
"offset": 0,
"has_more": true
}
}
Error Response
All errors follow a consistent format:
{
"error": "Human-readable error message",
"code": "machine_readable_code"
}
See Error Codes for a complete reference.
Rate Limiting
All API requests are subject to rate limits. See Rate Limits for details.
Rate limit headers are included in every response:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1705764000
What’s Next?