Skip to main content

SnapR API

v1

Use the SnapR API and webhooks to connect AI real estate photo enhancement to your existing tools and workflows.

Authentication

All API requests require a Bearer token in the Authorization header. Create API keys in your Dashboard Settings.

curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://snap-r.com/api/v1/listings

API keys start with sk_live_. Keep them secret — never expose in client-side code.

Endpoints

Listings

GET/api/v1/listingsList all listings. Supports ?page=1&per_page=50
POST/api/v1/listingsCreate a new listing
GET/api/v1/listings/:idGet listing details with photos
PATCH/api/v1/listings/:idUpdate listing fields
DELETE/api/v1/listings/:idDelete a listing

Photos

GET/api/v1/listings/:id/photosList photos for a listing
POST/api/v1/photos/:id/enhanceApply AI enhancement to a photo

Preparation & Marketing

POST/api/v1/listings/:id/prepareTrigger AI preparation pipeline
GET/api/v1/listings/:id/statusGet preparation + marketing status

Video

POST/api/v1/video/generateTrigger video render (returns render_id)
GET/api/v1/video/:renderIdGet video render status + output URL

Leads

GET/api/v1/leadsList leads. Supports ?listing_id=&page=&per_page=
POST/api/v1/leadsCreate a new lead

Webhooks

GET/api/v1/webhooksList outgoing webhooks
POST/api/v1/webhooksCreate a webhook endpoint
PATCH/api/v1/webhooksUpdate webhook config
DELETE/api/v1/webhooksDelete a webhook

Response Format

Success (single item):

{ "data": { "id": "...", "title": "..." } }

Success (list):

{ "data": [...], "meta": { "page": 1, "per_page": 50, "total": 123 } }

Error:

{ "error": { "message": "...", "code": "validation_error" } }

Rate Limits

Default: 60 requests/minute per API key.

Rate limit headers are included in every response:

  • X-RateLimit-Limit — Maximum requests per window
  • X-RateLimit-Remaining — Remaining requests
  • Retry-After — Seconds to wait (on 429)

Webhook Events

Subscribe to real-time events via outgoing webhooks:

listing.createdlisting.updatedlisting.preparedlead.createdlead.updatedpost.publishedpost.scheduledphoto.enhanced

Payloads are signed with HMAC-SHA256 via the X-Webhook-Signature header.

Code Examples

JavaScript / Node.js

const response = await fetch('https://snap-r.com/api/v1/listings', {
  headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
const { data, meta } = await response.json();
console.log(`Found ${meta.total} listings`);

Python

import requests

headers = {"Authorization": "Bearer YOUR_API_KEY"}
response = requests.get("https://snap-r.com/api/v1/listings", headers=headers)
data = response.json()
print(f"Found {data['meta']['total']} listings")