Developer Documentation
Everything you need to integrate with the API Wrapper platform.
Getting Started
Welcome to API Wrapper
API Wrapper provides a unified interface to access multiple business APIs (LinkedIn, Twitter, and more) using a single API key. This documentation will help you get started quickly.
Prerequisites
- A free API Wrapper account
- An API key from the dashboard
- Your favorite HTTP client (curl, Postman, etc.)
Quick Start
# Set your API key export API_KEY="your_api_key_here" # Make your first request curl -H "Authorization: Bearer $API_KEY" \ "https://api.apiwrapper.dev/api/v1/linkedin/profile?username=john-doe"
Authentication
API Key Authentication
All API requests require authentication via a Bearer token in the Authorization header. You can generate API keys from your dashboard.
Headers
Authorization: Bearer api_abc123def456... Content-Type: application/json
Error Responses
If authentication fails, you will receive a 401 response:
{
"error": "Invalid or deactivated API key."
}Security Note: Never share your API keys or commit them to version control. Regenerate compromised keys immediately from the dashboard.
Endpoints
Available Endpoints
LinkedIn Profile
/api/v1/linkedin/profile| Parameter | Type | Required | Description |
|---|---|---|---|
| username | string | Yes | LinkedIn public profile username |
Example Response
{
"username": "john-doe",
"firstName": "John",
"lastName": "Doe",
"headline": "Senior Software Engineer at Tech Corp",
"location": "San Francisco Bay Area",
"industry": "Technology",
"profilePicture": null,
"summary": "Experienced software engineer...",
"experience": [
{
"title": "Senior Software Engineer",
"company": "Tech Corp",
"location": "San Francisco, CA",
"startDate": "2020-03",
"endDate": null,
"description": "Building the next generation..."
}
],
"education": [...],
"skills": ["TypeScript", "Python", "Go", ...],
"publicProfileUrl": "https://www.linkedin.com/in/john-doe"
}Rate Limits
Rate Limiting
API Wrapper uses a token bucket algorithm for rate limiting. Each tier has a different limit:
| Tier | Limit | Window |
|---|---|---|
| Free | 100 requests | 1 hour |
| Pro | 1,000 requests | 1 hour |
Rate Limit Headers
Every response includes rate limit information in the headers:
X-RateLimit-Limit: 100 X-RateLimit-Remaining: 42 X-RateLimit-Reset: 1712345678
When you exceed your limit, you will receive a 429 Too Many Requests response.
Caching
Caching
API responses are cached for 60 seconds by default. Cached responses are served faster and do not count against your rate limit.
Cache Headers
Check the X-Cache header to see if a response was cached:
X-Cache: HIT— Response served from cacheX-Cache: MISS— Response fetched fresh
Caching uses Redis in production with an in-memory fallback for development.
Code Examples
Code Examples
cURL
curl -H "Authorization: Bearer api_abc123..." \ "https://api.apiwrapper.dev/api/v1/linkedin/profile?username=john-doe"
Python
import requests
API_KEY = "api_abc123..."
headers = {"Authorization": f"Bearer {API_KEY}"}
params = {"username": "john-doe"}
response = requests.get(
"https://api.apiwrapper.dev/api/v1/linkedin/profile",
headers=headers,
params=params,
)
print(response.json())JavaScript / TypeScript
const API_KEY = "api_abc123...";
const response = await fetch(
"https://api.apiwrapper.dev/api/v1/linkedin/profile?username=john-doe",
{
headers: {
Authorization: `Bearer ${API_KEY}`,
},
}
);
const data = await response.json();
console.log(data);Go
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
req, _ := http.NewRequest("GET",
"https://api.apiwrapper.dev/api/v1/linkedin/profile?username=john-doe",
nil)
req.Header.Set("Authorization", "Bearer api_abc123...")
client := &http.Client{}
resp, _ := client.Do(req)
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}