Introduction
The Snappr API is your universal API for commissioning and handling visual content.
For example, you can use the Snappr API for the following:
- On-demand photography: Commission photoshoots with Snappr network photographers across 90% of the English-speaking world.
- Editing services: Commission photo editing services according to pre-defined specifications, with two different types of service available:
- Fully automated: Our fastest editing service, producing near-instant results.
- Human-augmented editing services: Our most premium editing service, backed by the world's best professional photo editors.
- Image handling: Retrieve and handle images from photoshoots and editing jobs.
In future releases, you will also be able to use the Snappr API for the following:
- On-demand videography: Commission video shoots with Snappr network videographers.
- Referrals: Refer your customers to recommended on-demand photography or videography products.
- Asset distribution: Trigger sharing of images or videos, or push assets to third-party destinations.
- Prints: Use images to order various customized print products.
- Stock photography: Retrieve stock photos according to pre-defined specifications.
The Snappr API is available only to Snappr For Enterprise customers. If you do not currently have a Snappr for Enterprise account and are interesting in setting one up, find out more here.
We have code examples in Shell, displayed in the panel on the right. We will have language bindings for JavaScript very soon.
Environments
Illustrative Production request:
curl "https://api.snappr.com/endpoint" \
-H ...
-H ...
Illustrative Sandbox (testing) request:
curl "https://sandbox.snappr.com/endpoint" \
-H ...
-H ...
We provide both a Production environment for real-world use and a Sandbox environment for testing purposes.
For Production use, use the base URL https://api.snappr.com
as in the examples throughout the documentation.
For Sandbox use, substitute the base URL for https://sandbox.snappr.com
.
Authentication
curl "/example-endpoint" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z"
Replace the example key above with your API key. This fake key is used in all of the following request examples.
Snappr uses API keys to allow access to the API. You can access or regenerate your API key from your Photography Portal GUI. Each user has a single unique active API key. Regenerating your API key will deactivate your previous key. Deleting a user will deactivate their API key.
An API key needs to be included in all API requests in a header of this format:
Authorization: Bearer api_key
Coverage
Get Coverage
Example request when latitude and longitude are provided:
curl "https://api.snappr.com/coverage?latitude=34.0522&longitude=-118.2437&shoottype=event" \
-H 'accept-version: 1.0.0' \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z"
Example JSON response:
{
"latitude": 34.0522,
"longitude": -118.2437,
"shoottype": "event",
"coverage": false
}
Example request when address is provided:
curl "https://api.snappr.com/coverage" \
-H 'accept-version: 1.0.0' \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z"
-H "Content-Type: application/json" \
--data-binary $'{
"address": "Golden Gate Bridge Welcome Center, Golden Gate Bridge, Coastal Trail, San Francisco, CA, USA",
"shoottype" : "event"
}'
Example JSON response:
{
"latitude": 37.8077,
"longitude": -122.477,
"shoottype": "event",
"coverage": false
}
This endpoint returns Snappr coverage status (boolean) for a given location and shoot type. Coverage status is independent of specific dates or times.
HTTP Request
GET https://api.snappr.com/coverage?latitude=:latitude&longitude=:longitude&shoottype=:shoottype
Query Parameters
Parameter | Type | Description | Required |
---|---|---|---|
latitude |
Number | Latitude of the shoot location. | No* |
longitude |
Number | Longitude of the shoot location. | No* |
address |
String | Address of the shoot location. Must be a Google Maps valid address. | No* |
shoottype |
String | Name of the shoot type (see Shoot types endpoints), e.g. "event". |
Yes |
creator_id |
String | The identifier of the creator. You can use this parameter to check if a specific creator has coverage for your desired location. | No |
Availability
Get Availability
Example request when latitude and longitude are provided:
curl "https://api.snappr.com/availability?latitude=34.0522&longitude=-118.2437&shoottype=event&duration=120&date=2018-12-01" \
-H 'accept-version: 1.0.0' \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z"
Example JSON response:
{
"latitude": 34.0522,
"longitude": -118.2437,
"shoottype": "event",
"duration": 120,
"date": "2018-12-01",
"timezone": "America/Los_Angeles",
"available_times": [
"2018-12-01T07:30:00Z",
"2018-12-01T09:30:00Z",
"2018-12-01T15:00:00Z",
"2018-12-01T15:30:00Z"
]
}
Example request when address is provided:
curl "https://api.snappr.com/availability" \
-H 'accept-version: 1.0.0' \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z"
-H "Content-Type: application/json" \
--data-binary $'{
"address": "Golden Gate Bridge Welcome Center, Golden Gate Bridge, Coastal Trail, San Francisco, CA, USA",
"shoottype": "event",
"duration": 120,
"date": "2018-12-01"
}'
Example JSON response:
{
"latitude": 37.8077,
"longitude": -122.477,
"shoottype": "event",
"duration": 120,
"date": "2018-12-01",
"timezone": "America/Los_Angeles",
"available_times": [
"2018-12-01T07:30:00Z",
"2018-12-01T09:30:00Z",
"2018-12-01T15:00:00Z",
"2018-12-01T15:30:00Z"
]
}
This endpoint returns time availability (i.e. available shoot start times) for a combination of location, date, shoot type and duration.
HTTP Request
GET https://api.snappr.com/availability?latitude=:latitude&longitude=:longitude&shoottype=:shoottype&duration=:duration&date=:date
Query Parameters
Parameter | Type | Description | Required |
---|---|---|---|
latitude |
Number | Latitude of the shoot location. | No* |
longitude |
Number | Longitude of the shoot location. | No* |
address |
String | Address of the shoot location. Must be a Google Maps valid address. | No* |
shoottype |
String | Name of the shoot type (see Shoot types endpoints), e.g. "event". |
Yes |
duration |
Integer | Length of the shoot in minutes. | Yes |
date |
Date (ISO) | Date for which you want to check time availability. | Yes |
creator_id |
String | The identifier of the creator. You can use this to get the availability of a specific Snappr creator. | No |
Bookings
Create New Booking
Example request when start_at, latitude and, longitude are provided:
curl "https://api.snappr.com/bookings" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z" \
-H 'accept-version: 1.0.0' \
-H "Content-Type: application/json" \
--data-binary $'{
"title": "Emerald Theatre Shoot",
"latitude": 34.0522,
"longitude": -118.2437,
"shoottype": "event",
"start_at": "2018-12-01T07:30:00Z",
"duration": 120,
"location_notes": "Location is Emerald Theatre - ring buzzer at main entrance on arrival",
"style_notes": "Shots of as many members of crowd as possible; shallow depth of field where possible",
"customer_firstname": "Mary",
"customer_surname": "Smith",
"customer_email": "test@snappr.com",
"customer_mobilephone": "+14153339966",
"customer_company": "Snappr Inc.",
"internal_id": "123-ABC",
"tags": ["tag1", "tag2", "tag3"]
}'
Example JSON response:
{
"uid": "0ccefa53-b346-4d3e-8dcb-79a914289928",
"title": "Emerald Theatre Shoot",
"status": "paid",
"credits": 249,
"latitude": 34.0522,
"longitude": -118.2437,
"shoottype": "event",
"start_at": "2018-12-01T07:30:00Z",
"duration": 120,
"location_notes": "Location is Emerald Theatre - ring buzzer at main entrance on arrival",
"style_notes": "Shots of as many members of crowd as possible; shallow depth of field where possible",
"customer_firstname": "Mary",
"customer_surname": "Smith",
"customer_email": "test@snappr.com",
"customer_mobilephone": "+14153339966",
"customer_company": "Snappr Inc.",
"creator_name": "Hollie B.",
"creator_id": "69a66cb2-dcb2-4803-9d23-f7894e443e68",
"creator_profile_image_url": "https://snappr.imgix.net/d7f5be08-e189-4c9b-bdb5-172111560d9d?auto=format&w=300&h=300&fit=facearea&facepad=2&s=3dd41a8404ba86d78d54adad40fd9108",
"created_at": "2018-09-01T09:12:00Z",
"updated_at": "2018-09-01T09:12:00Z",
"tags": ["tag1", "tag2", "tag3"]
}
Example request when start_at is not provided (end-customer picked date and time):
curl "https://api.snappr.com/bookings" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z" \
-H 'accept-version: 1.0.0' \
-H "Content-Type: application/json" \
--data-binary $'{
"title": "Emerald Theatre Shoot",
"latitude": 34.0522,
"longitude": -118.2437,
"shoottype": "event",
"start_at": null,
"duration": 120,
"location_notes": "Location is Emerald Theatre - ring buzzer at main entrance on arrival",
"style_notes": "Shots of as many members of crowd as possible; shallow depth of field where possible",
"customer_firstname": "Mary",
"customer_surname": "Smith",
"customer_email": "test@snappr.com",
"customer_mobilephone": "+14153339966",
"customer_company": "Snappr Inc.",
"internal_id": "123-ABC",
"tags": ["tag1", "tag2", "tag3"]
}'
Example JSON response:
{
"uid": "0ccefa53-b346-4d3e-8dcb-79a914289928",
"title": "Emerald Theatre Shoot",
"status": "paid_pending_schedule",
"credits": 249,
"latitude": 34.0522,
"longitude": -118.2437,
"shoottype": "event",
"duration": 120,
"location_notes": "Location is Emerald Theatre - ring buzzer at main entrance on arrival",
"style_notes": "Shots of as many members of crowd as possible; shallow depth of field where possible",
"customer_firstname": "Mary",
"customer_surname": "Smith",
"customer_email": "test@snappr.com",
"customer_mobilephone": "+14153339966",
"customer_company": "Snappr Inc.",
"internal_id": "123-ABC",
"created_at": "2018-09-01T09:12:00Z",
"updated_at": "2018-09-01T09:12:00Z"
"scheduling_url": "https://app.snappr.co/scheduling/0ccefa53-b346-4d3e-8dcb-79a914289928?token=33899eb920006f7780ef5756a2b91688c840183f7e238827bce2b7cf289202c9",
"tags": ["tag1", "tag2", "tag3"]
}
Example request when address is provided:
curl "https://api.snappr.com/bookings" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z" \
-H 'accept-version: 1.0.0' \
-H "Content-Type: application/json" \
--data-binary $'{
"title": "Emerald Theatre Shoot",
"address": "Golden Gate Bridge Welcome Center, Golden Gate Bridge, Coastal Trail, San Francisco, CA, USA",
"shoottype": "event",
"start_at": "2018-12-01T07:30:00Z",
"duration": 120,
"location_notes": "Location is Emerald Theatre - ring buzzer at main entrance on arrival",
"style_notes": "Shots of as many members of crowd as possible; shallow depth of field where possible",
"customer_firstname": "Mary",
"customer_surname": "Smith",
"customer_email": "test@snappr.com",
"customer_mobilephone": "+14153339966",
"customer_company": "Snappr Inc.",
"internal_id": "123-ABC",
"tags": ["tag1", "tag2", "tag3"]
}'
Example JSON response:
{
"uid": "0ccefa53-b346-4d3e-8dcb-79a914289928",
"title": "Emerald Theatre Shoot",
"status": "paid",
"credits": 249,
"latitude": 37.8077,
"longitude": -122.477,
"shoottype": "event",
"start_at": "2018-12-01T07:30:00Z",
"duration": 120,
"location_notes": "Location is Emerald Theatre - ring buzzer at main entrance on arrival",
"style_notes": "Shots of as many members of crowd as possible; shallow depth of field where possible",
"customer_firstname": "Mary",
"customer_surname": "Smith",
"customer_email": "test@snappr.com",
"customer_mobilephone": "+14153339966",
"customer_company": "Snappr Inc.",
"creator_name": "Hollie B.",
"creator_id": "69a66cb2-dcb2-4803-9d23-f7894e443e68",
"creator_profile_image_url": "https://snappr.imgix.net/d7f5be08-e189-4c9b-bdb5-172111560d9d?auto=format&w=300&h=300&fit=facearea&facepad=2&s=3dd41a8404ba86d78d54adad40fd9108",
"created_at": "2018-09-01T09:12:00Z",
"updated_at": "2018-09-01T09:12:00Z",
"tags": ["tag1", "tag2", "tag3"]
}
This endpoint creates a new photoshoot booking.
Broadly, there are two main ways to create a new photoshoot booking, and examples are provided for each:
- Provide all shoot details including the start date and time for the shoot (
start_at
). With this option, Snappr will not seek any input on shoot details from your end-customer, they will simply be notified if the booking is placed successfully. - Provide all shoot details except the start date and time for the shoot (
start_at
set tonull
). This will trigger an automatic process to collect the start date and time from your end-customer using the contact details (email and/or mobile phone) provided. End-customers will be able to select from all available dates and times for the shoot location, using a Snappr UI.
HTTP Request
POST https://api.snappr.com/bookings
Request (Body) Parameters
Parameter | Type | Description | Required |
---|---|---|---|
title |
String | Custom shoot title. | No |
latitude |
Number | Latitude of the shoot location. | No* |
longitude |
Number | Longitude of the shoot location. | No* |
address |
String | Address of the shoot location. Must be a Google Maps valid address. | No* |
shoottype |
String | Name of the shoot type (see Shoot types endpoints), e.g. "event". |
Yes |
start_at |
Datetime (ISO) | Start time of the shoot in UTC. If this is set to null , then Snappr will automatically seek this information from the end-customer. |
Yes |
duration |
Integer | Length of the shoot in minutes. | Yes |
location_notes |
String | Details to help the photographer find the specific location and contact person at the time of the shoot. | No |
style_notes |
String | Instructions, stylistic preferences and other special requests. | No |
customer_firstname |
String | First name of your end-customer. | Yes |
customer_surname |
String | Last name of your end-customer. | No |
customer_email |
String (email) | Valid email address of your end-customer. | Yes |
customer_mobilephone |
String | Valid mobile phone number of your end-customer. | Yes |
customer_company |
String | Name of your end-customer's company. | No |
internal_id |
String | ID for your internal systems. Useful for matching a booking with your internal data. | No |
creator_id |
String | The identifier of the creator. You can use this to assign this booking to a specific Snappr creator. | No |
tags |
Array String | An array of strings containing tags used to identify bookings within the Snappr portal, also utilized for creating reports. (Limit chars 255) | No |
Get All Bookings
Example request:
curl "https://api.snappr.com/bookings" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z" \
-H 'accept-version: 1.0.0'
Example JSON response:
{
"results": [
{
"uid": "0ccefa53-b346-4d3e-8dcb-79a914289928",
"title": "Emerald Theatre Shoot",
"status": "paid",
"credits": 249,
"latitude": 34.0522,
"longitude": -118.2437,
"shoottype": "event",
"start_at": "2018-12-01T07:30:00Z",
"duration": 120,
"location_notes": "Location is Emerald Theatre - ring buzzer at main entrance on arrival",
"style_notes": "Shots of as many members of crowd as possible; shallow depth of field where possible",
"customer_firstname": "Mary",
"customer_surname": "Smith",
"customer_email": "test@snappr.com",
"customer_mobilephone": "+14153339966",
"customer_company": "Snappr Inc.",
"internal_id": "123-ABC",
"creator_name": "Hollie B.",
"creator_id": "69a66cb2-dcb2-4803-9d23-f7894e443e68",
"creator_profile_image_url": "https://snappr.imgix.net/d7f5be08-e189-4c9b-bdb5-172111560d9d?auto=format&w=300&h=300&fit=facearea&facepad=2&s=3dd41a8404ba86d78d54adad40fd9108",
"created_at": "2018-09-01T09:12:00Z",
"updated_at": "2018-09-01T09:12:00Z"
},
{
"uid": "48b095fd-7fc0-41dc-b632-9b032e0a65e6",
"title": "Family Shoot",
"status": "paid",
"credits": 349,
"latitude": 34.1513,
"longitude": -118.2439,
"shoottype": "family",
"start_at": "2018-12-01T07:30:00Z",
"duration": 180,
"location_notes": "Meet near the park entance",
"style_notes": "Variety of group shots of the family with different backgrounds",
"customer_firstname": "John",
"customer_surname": "Smith",
"customer_email": "testing@snappr.com",
"customer_mobilephone": "+14153338822",
"customer_company": null,
"creator_name": "Jamie C.",
"creator_id": "69a66cb2-dcb2-4803-9d23-f7894e443e68",
"creator_profile_image_url": "https://snappr.imgix.net/d7f5be08-e189-4c9b-bdb5-172111560d9d?auto=format&w=300&h=300&fit=facearea&facepad=2&s=3dd41a8404ba86d78d54adad40fd9108",
"created_at": "2018-09-01T08:34:00Z",
"updated_at": "2018-09-01T08:34:00Z"
}
],
"count": 2,
"limit": 100,
"offset": 0,
"total": 2
}
This endpoint retrieves all bookings.
HTTP Request
GET https://api.snappr.com/bookings?limit=:limit&offset=:offset
Query Parameters
Parameter | Type | Description | Required |
---|---|---|---|
limit |
Integer | Maximum number of bookings to be returned (maximum of 100). Defaults to 100 . |
No |
offset |
Integer | Offset used for pagination if there are more bookings than the limit (or more than 100 bookings if there is no limit). Defaults to 0 . |
No |
Get Single Booking
Example request:
curl "https://api.snappr.com/bookings/0ccefa53-b346-4d3e-8dcb-79a914289928" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z" \
-H 'accept-version: 1.0.0'
Example JSON response:
{
"uid": "0ccefa53-b346-4d3e-8dcb-79a914289928",
"title": "Emerald Theatre Shoot",
"status": "paid",
"credits": 249,
"latitude": 34.0522,
"longitude": -118.2437,
"shoottype": "event",
"start_at": "2018-12-01T07:30:00Z",
"duration": 120,
"location_notes": "Location is Emerald Theatre - ring buzzer at main entrance on arrival",
"style_notes": "Shots of as many members of crowd as possible; shallow depth of field where possible",
"customer_firstname": "Mary",
"customer_surname": "Smith",
"customer_email": "test@snappr.com",
"customer_mobilephone": "+14153339966",
"customer_company": "Snappr Inc.",
"internal_id": "123-ABC",
"creator_name": "Hollie B.",
"creator_id": "69a66cb2-dcb2-4803-9d23-f7894e443e68",
"creator_profile_image_url": "https://snappr.imgix.net/d7f5be08-e189-4c9b-bdb5-172111560d9d?auto=format&w=300&h=300&fit=facearea&facepad=2&s=3dd41a8404ba86d78d54adad40fd9108",
"created_at": "2018-09-01T09:12:00Z",
"created_at": "2018-09-01T09:12:00Z",
"updated_at": "2018-09-01T09:12:00Z"
}
This endpoint retrieves a specific booking using the ID of the booking.
HTTP Request
GET https://api.snappr.com/bookings/:booking_uid
Request Parameters
Parameter | Type | Description | Required |
---|---|---|---|
booking_uid |
String | The identifier of the booking. | Yes |
Editing Jobs
Create New Editing Job
Example request when images are provided:
curl "https://api.snappr.com/editing-jobs" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z" \
-H 'accept-version: 1.0.0' \
-H "Content-Type: application/json" \
--data-binary $'{
"title": "Restaurant gallery",
"type": "food",
"internal_id": "123-ABC",
"preset_id": "1ea37f86-c82d-4267-8773-9a13fd4f1337",
"images": [
{
"file_name": "ZD 001.JPG",
"url_source": "https://prod-us-media-snappr.s3.us-west-1.amazonaws.com/ed10cf86-97f9-4ce6-af6f-a01dfe891114?AWSAccessKeyId=AKIAIIR7FMZ7RANC45MA&Expires=1586478927&Signature=IqGcYjJZXM7%2FSX%2BoHQk4mccB3FA%3D"
},
{
"file_name": "ZD 002.JPG",
"url_source": "https://prod-us-media-snappr.s3.us-west-1.amazonaws.com/ee9be5f8-84a8-4592-88a0-1781d0c39d0a?AWSAccessKeyId=AKIAIIR7FMZ7RANC45MA&Expires=1586478927&Signature=E%2BPTBIqQOEgf0MctPRy6WXLIsBM%3D"
},
{
"file_name": "ZD 003.JPG",
"url_source": "https://prod-us-media-snappr.s3.us-west-1.amazonaws.com/6b6eae3e-ebfb-4776-8a20-2b8087f76418?AWSAccessKeyId=AKIAIIR7FMZ7RANC45MA&Expires=1586478927&Signature=cqgRr6oJDYYMxkGm2M34MKDnArM%3D"
},
]
}'
Example JSON response:
{
"uid": "0ccefa53-b346-4d3e-8dcb-79a914289928",
"title": "Restaurant gallery",
"status": "creating",
"credits": 9,
"type": "food",
"preset_id": "1ea37f86-c82d-4267-8773-9a13fd4f1337",
"created_at": "2018-09-01T09:12:00Z",
"updated_at": "2018-09-01T09:12:00Z"
}
Example request when images are not provided (third party uploads the images):
curl "https://api.snappr.com/editing-jobs" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z" \
-H 'accept-version: 1.0.0' \
-H "Content-Type: application/json" \
--data-binary $'{
"title": "Restaurant gallery",
"type": "food",
"uploader_firstname": "Mary",
"uploader_surname": "Smith",
"uploader_email": "test@snappr.com",
"uploader_mobilephone": "+14153339966",
"uploader_company": "Snappr Inc.",
"internal_id": "123-ABC",
"preset_id": "1ea37f86-c82d-4267-8773-9a13fd4f1337",
"images": null
}'
Example JSON response:
{
"uid": "0ccefa53-b346-4d3e-8dcb-79a914289928",
"title": "Restaurant gallery",
"status": "pending_upload",
"type": "food",
"preset_id": "1ea37f86-c82d-4267-8773-9a13fd4f1337",
"uploader_firstname": "Mary",
"uploader_surname": "Smith",
"uploader_email": "test@snappr.com",
"uploader_mobilephone": "+14153339966",
"uploader_company": "Snappr Inc.",
"internal_id": "123-ABC",
"created_at": "2018-09-01T09:12:00Z",
"updated_at": "2018-09-01T09:12:00Z"
}
This endpoint creates a new editing job.
Broadly, there are two main ways to create a new editing job, and examples are provided for each:
- Provide all editing job details including the source images (
images
). - Provide all editing job details except the source images (
images
set tonull
). This will trigger an automatic process to collect the images from your third party uploader using the contact details (email and/or mobile phone) provided.
HTTP Request
POST https://api.snappr.com/editing-jobs
Request (Body) Parameters
Parameter | Type | Description | Required for method 1 | Required for method 2 |
---|---|---|---|---|
title |
String | Custom editing job title. | No | No |
type |
String | Name of the editing job type (see Editing job types endpoints), e.g. "event". |
Yes | Yes |
images |
Array of Image objects | Array of source images. If it is set to null then Snappr will automatically seek this information from a third party uploader. |
Yes | Yes (null ) |
images[].file_name |
String | Name of the source image. | No | No |
images[].url_source |
URL | URL of the source image. | Yes | No |
uploader_firstname |
String | First name of third party uploader. | No | Yes |
uploader_surname |
String | Last name of third party uploader. | No | No |
uploader_email |
String (email) | Valid email address of third party uploader. | No | Yes |
uploader_mobilephone |
String | Valid mobile phone number of third party uploader. | No | No |
uploader_company |
String | Name of third party uploader's company. | No | No |
internal_id |
String | ID for your internal systems. Useful for matching an editing job with your internal data. | No | No |
preset_id |
String | ID of your preset. New presets need to be created in the GUI. | Yes | Yes |
Get All Editing Jobs
Example request:
curl "https://api.snappr.com/editing-jobs" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z" \
-H 'accept-version: 1.0.0'
Example JSON response:
{
"results": [
{
"uid": "0ccefa53-b346-4d3e-8dcb-79a914289928",
"title": "Restaurant gallery",
"status": "paid",
"credits": 9,
"type": "food",
"uploader_firstname": "Mary",
"uploader_surname": "Smith",
"uploader_email": "test@snappr.com",
"uploader_mobilephone": "+14153339966",
"uploader_company": "Snappr Inc.",
"internal_id": "123-ABC",
"created_at": "2018-09-01T09:12:00Z",
"updated_at": "2018-09-01T09:12:00Z"
},
{
"uid": "48b095fd-7fc0-41dc-b632-9b032e0a65e6",
"title": "Car Shoot",
"status": "completed",
"credits": 11,
"type": "automotive",
"created_at": "2018-09-01T08:34:00Z",
"updated_at": "2018-09-01T08:34:00Z"
}
],
"count": 2,
"limit": 100,
"offset": 0,
"total": 2
}
This endpoint retrieves all editing jobs.
HTTP Request
GET https://api.snappr.com/editing-jobs?limit=:limit&offset=:offset
Query Parameters
Parameter | Type | Description | Required |
---|---|---|---|
limit |
Integer | Maximum number of editing jobs to be returned (maximum of 100). Defaults to 100 . |
No |
offset |
Integer | Offset used for pagination if there are more editing jobs than the limit (or more than 100 editing jobs if there is no limit). Defaults to 0 . |
No |
Get Single Editing Job
Example request:
curl "https://api.snappr.com/editing-jobs/0ccefa53-b346-4d3e-8dcb-79a914289928" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z" \
-H 'accept-version: 1.0.0'
Example JSON response:
{
"uid": "0ccefa53-b346-4d3e-8dcb-79a914289928",
"title": "Restaurant gallery",
"status": "paid",
"credits": 9,
"type": "food",
"uploader_firstname": "Mary",
"uploader_surname": "Smith",
"uploader_email": "test@snappr.com",
"uploader_mobilephone": "+14153339966",
"uploader_company": "Snappr Inc.",
"internal_id": "123-ABC",
"created_at": "2018-09-01T09:12:00Z",
"updated_at": "2018-09-01T09:12:00Z"
},
This endpoint retrieves a specific editing job using the ID of the editing job.
HTTP Request
GET https://api.snappr.com/editing-jobs/:editing_job_uid
Request Parameters
Parameter | Type | Description | Required |
---|---|---|---|
editing_job_uid |
String | The identifier of the editing job. | Yes |
Presets
Get All Presets
Example request:
curl "https://api.snappr.com/presets" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z" \
-H 'accept-version: 1.0.0'
Example JSON response:
{
"results": [
{
"uid": "ed10cf86-97f9-4ce6-af6f-a01dfe891114",
"name": "Restaurant menu",
"description": "In-depth improvements on photos taken by restaurant owners."
},
{
"uid": "ee9be5f8-84a8-4592-88a0-1781d0c39d0a",
"name": "Liquor store"
}
],
"count": 2,
"limit": 1000,
"offset": 0,
"total": 2
}
This endpoint retrieves all the presets.
HTTP Request
GET https://api.snappr.com/presets
Query Parameters
Parameter | Type | Description | Required |
---|---|---|---|
limit |
Integer | Maximum number of presets to be returned (maximum of 10000). Defaults to 1000 . |
No |
offset |
Integer | Offset used for pagination if there are more presets than the limit (or more than 1000 presets if there is no limit). Defaults to 0 . |
No |
Images
Get All Images For a Booking
Example request:
curl "https://api.snappr.com/bookings/0ccefa53-b346-4d3e-8dcb-79a914289928/images" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z" \
-H 'accept-version: 1.0.0'
Example JSON response:
{
"results": [
{
"uid": "ed10cf86-97f9-4ce6-af6f-a01dfe891114",
"file_name": "ZD 001.JPG",
"url_original": "https://prod-us-media-snappr.s3.us-west-1.amazonaws.com/ed10cf86-97f9-4ce6-af6f-a01dfe891114?AWSAccessKeyId=AKIAIIR7FMZ7RANC45MA&Expires=1586478927&Signature=IqGcYjJZXM7%2FSX%2BoHQk4mccB3FA%3D",
"url_thumb": "https://img.snappr.co/QlXCPwnEgV7P_RO4AJDLhOsq500=/fit-in/600x0/ed10cf86-97f9-4ce6-af6f-a01dfe891114"
},
{
"uid": "ee9be5f8-84a8-4592-88a0-1781d0c39d0a",
"file_name": "ZD 002.JPG",
"url_original": "https://prod-us-media-snappr.s3.us-west-1.amazonaws.com/ee9be5f8-84a8-4592-88a0-1781d0c39d0a?AWSAccessKeyId=AKIAIIR7FMZ7RANC45MA&Expires=1586478927&Signature=E%2BPTBIqQOEgf0MctPRy6WXLIsBM%3D",
"url_thumb": "https://img.snappr.co/rXtW9z6hGdDm3lebP9IPHGo9V5k=/fit-in/600x0/ee9be5f8-84a8-4592-88a0-1781d0c39d0a"
},
{
"uid": "6b6eae3e-ebfb-4776-8a20-2b8087f76418",
"file_name": "ZD 003.JPG",
"url_original": "https://prod-us-media-snappr.s3.us-west-1.amazonaws.com/6b6eae3e-ebfb-4776-8a20-2b8087f76418?AWSAccessKeyId=AKIAIIR7FMZ7RANC45MA&Expires=1586478927&Signature=cqgRr6oJDYYMxkGm2M34MKDnArM%3D",
"url_thumb": "https://img.snappr.co/gXk81aciTVokDvyi2NdWGNluhNg=/fit-in/600x0/6b6eae3e-ebfb-4776-8a20-2b8087f76418"
}
],
"count": 3,
"limit": 1000,
"offset": 0,
"total": 3
}
This endpoint retrieves all the images of a specific booking.
HTTP Request
GET https://api.snappr.com/bookings/:booking_uid/images
Request Parameters
Parameter | Type | Description | Required |
---|---|---|---|
booking_uid |
String | The identifier of the booking. | Yes |
Query Parameters
Parameter | Type | Description | Required |
---|---|---|---|
limit |
Integer | Maximum number of images to be returned (maximum of 10000). Defaults to 1000 . |
No |
offset |
Integer | Offset used for pagination if there are more images than the limit (or more than 1000 images if there is no limit). Defaults to 0 . |
No |
Get All Images For an Editing Job
Example request:
curl "https://api.snappr.com/editing-jobs/0ccefa53-b346-4d3e-8dcb-79a914289928/images" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z" \
-H 'accept-version: 1.0.0'
Example JSON response:
{
"results": [
{
"uid": "ed10cf86-97f9-4ce6-af6f-a01dfe891114",
"source": {
"file_name": "ZD 001.JPG",
"url_original": "https://prod-us-media-snappr.s3.us-west-1.amazonaws.com/ed10cf86-97f9-4ce6-af6f-a01dfe891114?AWSAccessKeyId=AKIAIIR7FMZ7RANC45MA&Expires=1586478927&Signature=IqGcYjJZXM7%2FSX%2BoHQk4mccB3FA%3D",
"url_thumb": "https://img.snappr.co/QlXCPwnEgV7P_RO4AJDLhOsq500=/fit-in/600x0/ed10cf86-97f9-4ce6-af6f-a01dfe891114"
},
"final": {
"file_name": "ZD 001.JPG",
"url_original": "https://prod-us-media-snappr.s3.us-west-1.amazonaws.com/ed10cf86-97f9-4ce6-af6f-a01dfe891114?AWSAccessKeyId=AKIAIIR7FMZ7RANC45MA&Expires=1586478927&Signature=IqGcYjJZXM7%2FSX%2BoHQk4mccB3FA%3D",
"url_thumb": "https://img.snappr.co/QlXCPwnEgV7P_RO4AJDLhOsq500=/fit-in/600x0/ed10cf86-97f9-4ce6-af6f-a01dfe891114"
}
},
{
"uid": "ee9be5f8-84a8-4592-88a0-1781d0c39d0a",
"source": {
"file_name": "ZD 002.JPG",
"url_original": "https://prod-us-media-snappr.s3.us-west-1.amazonaws.com/ee9be5f8-84a8-4592-88a0-1781d0c39d0a?AWSAccessKeyId=AKIAIIR7FMZ7RANC45MA&Expires=1586478927&Signature=E%2BPTBIqQOEgf0MctPRy6WXLIsBM%3D",
"url_thumb": "https://img.snappr.co/rXtW9z6hGdDm3lebP9IPHGo9V5k=/fit-in/600x0/ee9be5f8-84a8-4592-88a0-1781d0c39d0a"
},
"final": {
"file_name": "ZD 002.JPG",
"url_original": "https://prod-us-media-snappr.s3.us-west-1.amazonaws.com/ee9be5f8-84a8-4592-88a0-1781d0c39d0a?AWSAccessKeyId=AKIAIIR7FMZ7RANC45MA&Expires=1586478927&Signature=E%2BPTBIqQOEgf0MctPRy6WXLIsBM%3D",
"url_thumb": "https://img.snappr.co/rXtW9z6hGdDm3lebP9IPHGo9V5k=/fit-in/600x0/ee9be5f8-84a8-4592-88a0-1781d0c39d0a"
}
},
{
"uid": "6b6eae3e-ebfb-4776-8a20-2b8087f76418",
"source": {
"file_name": "ZD 003.JPG",
"url_original": "https://prod-us-media-snappr.s3.us-west-1.amazonaws.com/6b6eae3e-ebfb-4776-8a20-2b8087f76418?AWSAccessKeyId=AKIAIIR7FMZ7RANC45MA&Expires=1586478927&Signature=cqgRr6oJDYYMxkGm2M34MKDnArM%3D",
"url_thumb": "https://img.snappr.co/gXk81aciTVokDvyi2NdWGNluhNg=/fit-in/600x0/6b6eae3e-ebfb-4776-8a20-2b8087f76418"
},
"final": {
"file_name": "ZD 003.JPG",
"url_original": "https://prod-us-media-snappr.s3.us-west-1.amazonaws.com/6b6eae3e-ebfb-4776-8a20-2b8087f76418?AWSAccessKeyId=AKIAIIR7FMZ7RANC45MA&Expires=1586478927&Signature=cqgRr6oJDYYMxkGm2M34MKDnArM%3D",
"url_thumb": "https://img.snappr.co/gXk81aciTVokDvyi2NdWGNluhNg=/fit-in/600x0/6b6eae3e-ebfb-4776-8a20-2b8087f76418"
}
}
],
"count": 3,
"limit": 1000,
"offset": 0,
"total": 3
}
This endpoint retrieves all the images of a specific editing job.
HTTP Request
GET https://api.snappr.com/editing-jobs/:editing_job_uid/images
Request Parameters
Parameter | Type | Description | Required |
---|---|---|---|
editing_job_uid |
String | The identifier of the editing job. | Yes |
Query Parameters
Parameter | Type | Description | Required |
---|---|---|---|
limit |
Integer | Maximum number of images to be returned (maximum of 10000). Defaults to 1000 . |
No |
offset |
Integer | Offset used for pagination if there are more images than the limit (or more than 1000 images if there is no limit). Defaults to 0 . |
No |
Videos
Get All Videos For a Booking
Example request:
curl "https://api.snappr.com/bookings/0ccefa53-b346-4d3e-8dcb-79a914289928/videos" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z" \
-H 'accept-version: 1.0.0'
Example JSON response:
{
"results": [
{
"uid": "ed10cf86-97f9-4ce6-af6f-a01dfe891114",
"file_name": "ZD 001.MP4",
"url_original": "https://prod-us-media-snappr.s3.us-west-1.amazonaws.com/ed10cf86-97f9-4ce6-af6f-a01dfe891114?AWSAccessKeyId=AKIAIIR7FMZ7RANC45MA&Expires=1586478927&Signature=IqGcYjJZXM7%2FSX%2BoHQk4mccB3FA%3D",
},
{
"uid": "ee9be5f8-84a8-4592-88a0-1781d0c39d0a",
"file_name": "ZD 002.MP4",
"url_original": "https://prod-us-media-snappr.s3.us-west-1.amazonaws.com/ee9be5f8-84a8-4592-88a0-1781d0c39d0a?AWSAccessKeyId=AKIAIIR7FMZ7RANC45MA&Expires=1586478927&Signature=E%2BPTBIqQOEgf0MctPRy6WXLIsBM%3D",
},
{
"uid": "6b6eae3e-ebfb-4776-8a20-2b8087f76418",
"file_name": "ZD 003.MP4",
"url_original": "https://prod-us-media-snappr.s3.us-west-1.amazonaws.com/6b6eae3e-ebfb-4776-8a20-2b8087f76418?AWSAccessKeyId=AKIAIIR7FMZ7RANC45MA&Expires=1586478927&Signature=cqgRr6oJDYYMxkGm2M34MKDnArM%3D",
}
],
"count": 3,
"limit": 1000,
"offset": 0,
"total": 3
}
This endpoint retrieves all the Videos of a specific booking.
HTTP Request
GET https://api.snappr.com/bookings/:booking_uid/videos
Request Parameters
Parameter | Type | Description | Required |
---|---|---|---|
booking_uid |
String | The identifier of the booking. | Yes |
Query Parameters
Parameter | Type | Description | Required |
---|---|---|---|
limit |
Integer | Maximum number of videos to be returned (maximum of 10000). Defaults to 1000 . |
No |
offset |
Integer | Offset used for pagination if there are more videos than the limit (or more than 1000 videos if there is no limit). Defaults to 0 . |
No |
Shoot Types
Get All Shoot Types
Example request:
curl "https://api.snappr.com/shoottypes" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z" \
-H 'accept-version: 1.0.0'
Example JSON response:
{
"results": [
{
"name": "food",
"display_name": "Food"
},
{
"name": "real-estate",
"display_name": "Real Estate"
},
...
],
"count": 10,
"limit": 100,
"offset": 0,
"total": 10
}
This endpoint returns all available Snappr shoot types.
HTTP Request
GET https://api.snappr.com/shoottypes
Editing Job Types
Get All Editing Job Types
Example request:
curl "https://api.snappr.com/editing-job-types" \
-H "Authorization: Bearer zkTvDUe5jJBJFcjc6ckwapEwax8Kbs7h3nv2SHXSgh5qGhHP22ggsu4fbdZgf25z" \
-H 'accept-version: 1.0.0'
Example JSON response:
{
"results": [
{
"name": "food",
"display_name": "Food"
},
{
"name": "real-estate",
"display_name": "Real Estate"
},
...
],
"count": 10,
"limit": 100,
"offset": 0,
"total": 10
}
This endpoint returns all available Snappr editing job types.
HTTP Request
GET https://api.snappr.com/editing-job-types
Custom Webhooks
Example JSON payload sent to webhook URL as POST:
{
"type": "update",
"booking": {
"uid": "0ccefa53-b346-4d3e-8dcb-79a914289928",
"country_code": "US",
"created_at": "2018-09-01T09:12:00Z",
"creator_id": "69a66cb2-dcb2-4803-9d23-f7894e443e68",
"creator_name": "Hollie B.",
"credits": 249,
"customer_company": "Snappr Inc.",
"customer_email": "test@snappr.com",
"customer_firstname": "Mary",
"customer_mobilephone": "+14153339966",
"customer_surname": "Smith",
"duration": 120,
"internal_id": "123-ABC",
"latitude": 34.0522,
"location_notes": "Location is Emerald Theatre - ring buzzer at main entrance on arrival",
"longitude": -118.2437,
"portal_slug": "snappr-portal",
"shoottype": "event",
"start_at": "2018-12-01T07:30:00Z",
"status": "paid",
"style_notes": "Shots of as many members of crowd as possible; shallow depth of field where possible",
"title": "Emerald Theatre Shoot",
"updated_at": "2018-09-01T09:12:00Z",
}
}
You can set a custom webhook URL in the Snappr Photography Portal GUI. If the custom webhook URL is set, we will POST to that URL every time a booking is created or updated.
Setting URL
Click on the 'API' link in the top-right drop-down menu in your Photography Portal, or go to the following URL:
https://app.snappr.com/enterprise/api/webhook
Go to the 'Custom Webhook' section and click the 'Edit' button in the URL field. Type in the receiving URL of your choice, then click the 'Save' button. If you entered a valid URL, that endpoint will now start receiving all booking updates.
Errors
The Snappr API uses the following error codes:
Status | Name | Description |
---|---|---|
400 | SyntaxError | Request body has incorrect formatting. Most likely invalid JSON. |
400 | InvalidAPIVersion | Requested an invalid API version. |
400 | UnsupportedVersion | Requested an API version that is unsupported by the requested route. |
400 | NotImplemented | Requested a feature that is not currently implemented. |
400 | ValidationError | Validation failure. See 'Problems' field in response. |
400 | Conflict | Request has a conflict with existing data. |
400 | NotAvailable | Requested resource is not available in your region or for the requested date/time. |
400 | NoCoverage | There is no coverage by Snappr on the requested latitude /longitude for the shoottype . |
401 | Unauthorized | Provided access token is invalid or does not have access to requested resource. |
402 | InsufficientCredits | The account does not have a sufficient credit balance to perform the request. Add more credits in the GUI. |
404 | NotFound | Requested resource not found. |
429 | RateLimit | The rate limit of the provided access_token has been reached. Please have your application respect the X-RateLimit-Remaining header that is included on API responses. |
500 | ServerError | There was an issue with our server. Try again later. |
400 | UnknownError | An error occurred that is not a server error and is not described here. |