{
	"info": {
		"_postman_id": "lotsofsounds-api-collection",
		"name": "Lots of Sounds API",
		"description": "Official API collection for Lots of Sounds — a royalty-free sound effects API.\n\nGet your API key at https://www.lotsofsounds.com/dashboard/api-keys\n\nBase URL: https://api.lotsofsounds.com",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"variable": [
		{
			"key": "base_url",
			"value": "https://api.lotsofsounds.com",
			"type": "string"
		},
		{
			"key": "api_key",
			"value": "YOUR_API_KEY_HERE",
			"type": "string"
		},
		{
			"key": "sound_id",
			"value": "SOUND_ID_HERE",
			"type": "string"
		}
	],
	"item": [
		{
			"name": "Public",
			"description": "Endpoints that require no authentication.",
			"item": [
				{
					"name": "Health Check",
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{base_url}}/health",
							"host": ["{{base_url}}"],
							"path": ["health"]
						},
						"description": "Check if the API is running."
					},
					"response": [
						{
							"name": "200 OK",
							"status": "OK",
							"code": 200,
							"body": "{\n  \"status\": \"ok\",\n  \"service\": \"lotsofsounds-api\"\n}",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							]
						}
					]
				},
				{
					"name": "Get Sample Sounds",
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{base_url}}/api/v1/sounds/sample",
							"host": ["{{base_url}}"],
							"path": ["api", "v1", "sounds", "sample"],
							"query": [
								{
									"key": "q",
									"value": "",
									"description": "Search query (searches name and description)",
									"disabled": true
								},
								{
									"key": "tags",
									"value": "",
									"description": "Comma-separated tags to filter by (OR logic)",
									"disabled": true
								},
								{
									"key": "limit",
									"value": "12",
									"description": "Max results, capped at 12 (default: 12)",
									"disabled": true
								}
							]
						},
						"description": "Returns up to 12 sample sounds with optional search. No authentication required. Use this to preview the library before signing up."
					},
					"response": [
						{
							"name": "200 OK",
							"status": "OK",
							"code": 200,
							"body": "{\n  \"data\": [\n    {\n      \"id\": \"abc-123\",\n      \"name\": \"Rain on Roof\",\n      \"description\": \"Gentle rain falling on a metal roof\",\n      \"tags\": [\"rain\", \"ambient\", \"nature\"],\n      \"duration\": 12.5,\n      \"stream_url\": \"https://...\"\n    }\n  ],\n  \"pagination\": {\n    \"page\": 1,\n    \"limit\": 12,\n    \"total\": 12,\n    \"totalPages\": 1\n  },\n  \"meta\": {\n    \"message\": \"These are sample sounds. Sign up for full catalog access.\",\n    \"upgrade_url\": \"https://www.lotsofsounds.com/pricing\"\n  }\n}",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							]
						}
					]
				},
				{
					"name": "Stream Sample Sound",
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{base_url}}/api/v1/sounds/sample/{{sound_id}}/stream",
							"host": ["{{base_url}}"],
							"path": ["api", "v1", "sounds", "sample", "{{sound_id}}", "stream"]
						},
						"description": "Get a signed streaming URL for a sample sound. No authentication required."
					},
					"response": [
						{
							"name": "200 OK",
							"status": "OK",
							"code": 200,
							"body": "{\n  \"data\": {\n    \"id\": \"abc-123\",\n    \"name\": \"Rain on Roof\",\n    \"stream_url\": \"https://d123.cloudfront.net/...\"\n  }\n}",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							]
						},
						{
							"name": "404 Not Found",
							"status": "Not Found",
							"code": 404,
							"body": "{\n  \"error\": \"Sound not found\"\n}",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							]
						}
					]
				}
			]
		},
		{
			"name": "Sounds",
			"description": "Authenticated endpoints for searching, viewing, and downloading sounds.\n\nRequires a valid API key in the `x-api-key` header. Get yours at https://www.lotsofsounds.com/dashboard/api-keys",
			"item": [
				{
					"name": "Search Sounds",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "x-api-key",
								"value": "{{api_key}}",
								"description": "Your API key"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/v1/sounds?q=rain&limit=20&page=1",
							"host": ["{{base_url}}"],
							"path": ["api", "v1", "sounds"],
							"query": [
								{
									"key": "q",
									"value": "rain",
									"description": "Search query (searches name and description)"
								},
								{
									"key": "tags",
									"value": "",
									"description": "Comma-separated tags to filter by (e.g. ambient,nature)",
									"disabled": true
								},
								{
									"key": "min_duration",
									"value": "",
									"description": "Minimum duration in seconds",
									"disabled": true
								},
								{
									"key": "max_duration",
									"value": "",
									"description": "Maximum duration in seconds",
									"disabled": true
								},
								{
									"key": "sort",
									"value": "created_at",
									"description": "Sort by: created_at (default), duration, name",
									"disabled": true
								},
								{
									"key": "order",
									"value": "desc",
									"description": "Sort order: asc or desc (default)",
									"disabled": true
								},
								{
									"key": "limit",
									"value": "20",
									"description": "Items per page (default: 20, max: 100)"
								},
								{
									"key": "page",
									"value": "1",
									"description": "Page number (default: 1)"
								}
							]
						},
						"description": "Search and filter the entire sound library. Supports full-text search, tag filtering, duration range, sorting, and pagination.\n\nRate limits:\n- Pro: 2,500 requests/day\n- Enterprise: 50,000 requests/day"
					},
					"response": [
						{
							"name": "200 OK",
							"status": "OK",
							"code": 200,
							"body": "{\n  \"data\": [\n    {\n      \"id\": \"abc-123\",\n      \"name\": \"Rain on Roof\",\n      \"description\": \"Gentle rain falling on a metal roof\",\n      \"tags\": [\"rain\", \"ambient\", \"nature\"],\n      \"duration\": 12.5,\n      \"license\": \"CC0\",\n      \"stream_url\": \"/api/v1/sounds/abc-123/stream\",\n      \"download_url\": \"/api/v1/sounds/abc-123/download\"\n    }\n  ],\n  \"pagination\": {\n    \"page\": 1,\n    \"limit\": 20,\n    \"total\": 150,\n    \"totalPages\": 8\n  }\n}",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								},
								{
									"key": "X-RateLimit-Limit",
									"value": "2500"
								},
								{
									"key": "X-RateLimit-Remaining",
									"value": "2499"
								},
								{
									"key": "X-RateLimit-Reset",
									"value": "2026-04-05T00:00:00.000Z"
								}
							]
						},
						{
							"name": "401 Unauthorized",
							"status": "Unauthorized",
							"code": 401,
							"body": "{\n  \"error\": \"Missing x-api-key header\"\n}",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							]
						},
						{
							"name": "429 Rate Limited",
							"status": "Too Many Requests",
							"code": 429,
							"body": "{\n  \"error\": \"Rate limit exceeded. Resets at midnight UTC.\"\n}",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							]
						}
					]
				},
				{
					"name": "Get Sound by ID",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "x-api-key",
								"value": "{{api_key}}",
								"description": "Your API key"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/v1/sounds/{{sound_id}}",
							"host": ["{{base_url}}"],
							"path": ["api", "v1", "sounds", "{{sound_id}}"]
						},
						"description": "Get metadata for a single sound by its ID."
					},
					"response": [
						{
							"name": "200 OK",
							"status": "OK",
							"code": 200,
							"body": "{\n  \"data\": {\n    \"id\": \"abc-123\",\n    \"name\": \"Rain on Roof\",\n    \"description\": \"Gentle rain falling on a metal roof\",\n    \"tags\": [\"rain\", \"ambient\", \"nature\"],\n    \"duration\": 12.5,\n    \"license\": \"CC0\",\n    \"stream_url\": \"/api/v1/sounds/abc-123/stream\",\n    \"download_url\": \"/api/v1/sounds/abc-123/download\"\n  }\n}",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							]
						},
						{
							"name": "404 Not Found",
							"status": "Not Found",
							"code": 404,
							"body": "{\n  \"error\": \"Sound not found\"\n}",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							]
						}
					]
				},
				{
					"name": "Stream Sound",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "x-api-key",
								"value": "{{api_key}}",
								"description": "Your API key"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/v1/sounds/{{sound_id}}/stream",
							"host": ["{{base_url}}"],
							"path": ["api", "v1", "sounds", "{{sound_id}}", "stream"]
						},
						"description": "Get a signed streaming URL for playback. No download is counted."
					},
					"response": [
						{
							"name": "200 OK",
							"status": "OK",
							"code": 200,
							"body": "{\n  \"data\": {\n    \"id\": \"abc-123\",\n    \"name\": \"Rain on Roof\",\n    \"stream_url\": \"https://d123.cloudfront.net/...\"\n  }\n}",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							]
						},
						{
							"name": "404 Not Found",
							"status": "Not Found",
							"code": 404,
							"body": "{\n  \"error\": \"Sound not found\"\n}",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							]
						}
					]
				},
				{
					"name": "Download Sound",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "x-api-key",
								"value": "{{api_key}}",
								"description": "Your API key"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/v1/sounds/{{sound_id}}/download",
							"host": ["{{base_url}}"],
							"path": ["api", "v1", "sounds", "{{sound_id}}", "download"]
						},
						"description": "Get a signed download URL for a sound. The URL expires after 1 hour. Increments download count."
					},
					"response": [
						{
							"name": "200 OK",
							"status": "OK",
							"code": 200,
							"body": "{\n  \"data\": {\n    \"id\": \"abc-123\",\n    \"name\": \"Rain on Roof\",\n    \"download_url\": \"https://d123.cloudfront.net/...\",\n    \"expires_in\": 3600\n  }\n}",
							"header": [
								{
									"key": "Content-Type",
									"value": "application/json"
								}
							]
						}
					]
				},
				{
					"name": "Search by Tags",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "x-api-key",
								"value": "{{api_key}}",
								"description": "Your API key"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/v1/sounds?tags=ambient,nature&sort=duration&order=asc&limit=10",
							"host": ["{{base_url}}"],
							"path": ["api", "v1", "sounds"],
							"query": [
								{
									"key": "tags",
									"value": "ambient,nature",
									"description": "Comma-separated tags (must match ALL tags)"
								},
								{
									"key": "sort",
									"value": "duration",
									"description": "Sort by duration"
								},
								{
									"key": "order",
									"value": "asc",
									"description": "Shortest first"
								},
								{
									"key": "limit",
									"value": "10"
								}
							]
						},
						"description": "Example: Search for sounds tagged with both 'ambient' AND 'nature', sorted by duration ascending."
					},
					"response": []
				},
				{
					"name": "Search with Duration Filter",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "x-api-key",
								"value": "{{api_key}}",
								"description": "Your API key"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/v1/sounds?q=click&min_duration=0.5&max_duration=3",
							"host": ["{{base_url}}"],
							"path": ["api", "v1", "sounds"],
							"query": [
								{
									"key": "q",
									"value": "click",
									"description": "Search for click sounds"
								},
								{
									"key": "min_duration",
									"value": "0.5",
									"description": "At least 0.5 seconds"
								},
								{
									"key": "max_duration",
									"value": "3",
									"description": "At most 3 seconds"
								}
							]
						},
						"description": "Example: Search for short click sounds between 0.5 and 3 seconds."
					},
					"response": []
				}
			]
		}
	]
}
