NAV Navbar
shell

Introduction

The Snappr API is your universal API for commissioning and handling visual content.

Snappr api

For example, you can use the Snappr API for the following:

  1. On-demand photography: Commission photoshoots with Snappr network photographers across 90% of the English-speaking world.
  2. Editing services: Commission photo editing services according to pre-defined specifications, with two different types of service available:
    1. Fully automated: Our fastest editing service, producing near-instant results.
    2. Human-augmented editing services: Our most premium editing service, backed by the world's best professional photo editors.
  3. 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:

  1. On-demand videography: Commission video shoots with Snappr network videographers.
  2. Referrals: Refer your customers to recommended on-demand photography or videography products.
  3. Asset distribution: Trigger sharing of images or videos, or push assets to third-party destinations.
  4. Prints: Use images to order various customized print products.
  5. 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:

  1. 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.
  2. Provide all shoot details except the start date and time for the shoot (start_at set to null). 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:

  1. Provide all editing job details including the source images (images).
  2. Provide all editing job details except the source images (images set to null). 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",
    "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",
    "created_at": "2018-09-01T09:12:00Z",
    "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.