Getting Started
PermitsData API gives you access to building permit records, inspections, code violations, and contractor data for Salem, Oregon through a simple REST API.
Quick Start
1. Create an account
Sign up for free to get 100 API requests per month. No credit card required.
2. Get your API key
After confirming your email, create an API key in your dashboard. Your key will start with pdi_.
3. Make your first request
Search for building permits by address:
curl -H "X-API-Key: pdi_your_key_here" \
"https://api.permitsdata.com/v1/permits/search?address=123+Main+St&type=residential"Authentication
All API requests require an API key passed via the X-API-Key header. API keys start with the prefix pdi_.
curl -H "X-API-Key: pdi_your_key_here" \
"https://api.permitsdata.com/v1/permits/search?address=123+Main+St"Base URL
All API requests should be made to:
https://api.permitsdata.comPermits
Search and retrieve building permit records.
GET /v1/permits/search
?address=123 Main St # Street address (partial match)
&type=residential # Permit type filter
&status=issued # Status filter (issued, pending, expired, etc.)
&date_from=2024-01-01 # Issued after this date
&date_to=2024-12-31 # Issued before this date
&page=1 # Pagination (default: 1)
&per_page=25 # Results per page (default: 25, max: 100)
GET /v1/permits/{permit_number} # Get a single permit by numberPermit Response Fields
| Field | Type | Description |
|---|---|---|
| permit_number | string | Unique permit identifier |
| type | string | Permit type (Residential, Commercial, etc.) |
| status | string | Current status |
| address | string | Property address |
| description | string | Work description |
| valuation | number | Estimated project value in USD |
| issued_date | string | Date permit was issued (ISO 8601) |
| applicant | string | Applicant name |
Inspections
Access inspection records linked to permits.
GET /v1/inspections/search
?permit_number=BLD-2024-00142 # Filter by permit
&address=123 Main St # Filter by address
&result=pass # Filter by result (pass, fail, partial)
&date_from=2024-01-01 # After this date
&page=1
GET /v1/inspections/{id} # Get a single inspectionViolations
Look up code enforcement violations.
GET /v1/violations/search
?address=123 Main St # Filter by address
&case_number=CE-2024-001 # Filter by case number
&status=open # Filter by status (open, closed, resolved)
&page=1
GET /v1/violations/{case_number} # Get a single violationContractors
Search licensed contractors.
GET /v1/contractors/search
?name=Smith # Search by name (partial match)
&license_number=CCB-12345 # Filter by license number
&trade=plumbing # Filter by trade type
&status=active # Filter by license status
&page=1
GET /v1/contractors/{license_number} # Get a single contractorResponse Format
All successful responses follow a consistent format with a data wrapper:
{
"data": [
{
"permit_number": "BLD-2024-00142",
"type": "Residential",
"status": "Issued",
"address": "123 Main St",
...
}
],
"pagination": {
"page": 1,
"per_page": 25,
"total": 142
}
}Errors return a detail field:
{
"detail": "Invalid API key"
}Rate Limits
Rate limits are enforced per API key. The limits depend on your plan:
| Plan | Monthly Limit | Rate Limit |
|---|---|---|
| Free | 100 requests | 5 req/min |
| Basic | 2,500 requests | 30 req/min |
| Pro | 25,000 requests | 120 req/min |
| Enterprise | 250,000 requests | 500 req/min |
When you exceed your rate limit, the API returns a 429 Too Many Requests response with a Retry-After header.
Error Codes
| Code | Meaning |
|---|---|
| 400 | Bad request -- invalid parameters |
| 401 | Unauthorized -- missing or invalid API key |
| 403 | Forbidden -- insufficient permissions |
| 404 | Not found -- resource does not exist |
| 429 | Too many requests -- rate limit exceeded |
| 500 | Internal server error |