Contents

Service Description

The service description is the gateway to the ShootProof API. It provides your app with the information it needs to know what it can do within the ShootProof API. It does so by providing links. Your app uses these links to navigate the ShootProof API.

Get the Studio API service description

For more information, check out our service description guide.

get
/studio

Example Request

Header Parameters

Property Description
Authentication required

The bearer token used to make authenticated requests to the ShootProof Studio API. See the authorization guide for more information on how to obtain and use bearer tokens.

200 OK

The service description.

Response Body

When the Content-Type of the response is application/vnd.shootproof+json, the following properties will be available in the response body.

Properties
Property Description
contentType

An array of acceptable media types for this API service.

links required read-only

Each property defines a hypertext link relationship as indicated by a link object or array of link objects. The target URL of each hypertext link relationship is related to the current resource according to the defined semantics of the link relationship property name.

name

The name of the API service.

time

The current server time for this API service.

type

The type of resource represented.

Example Response
{
  "contentType": [
    "application/vnd.shootproof+json"
  ],
  "links": {
    "brand": {
      "href": "https://api.shootproof.com/studio/brand{/id}",
      "templated": true
    },
    "email-template-type": {
      "href": "https://api.shootproof.com/studio/email/template-type{/id}{?resourceType,resourceId}",
      "templated": true
    },
    "language": {
      "href": "https://api.shootproof.com/studio/language"
    },
    "me": {
      "href": "https://api.shootproof.com/studio/me"
    },
    "playlist": {
      "href": "https://api.shootproof.com/studio/playlist{/id}",
      "templated": true
    },
    "price-sheet": {
      "href": "https://api.shootproof.com/studio/price-sheet{/id}",
      "templated": true
    },
    "self": {
      "href": "https://api.shootproof.com/studio/"
    },
    "signature": {
      "href": "https://api.shootproof.com/studio/signature{/id}",
      "templated": true
    },
    "song": {
      "href": "https://api.shootproof.com/studio/song"
    },
    "studio-music-plan": {
      "href": "https://api.shootproof.com/studio/plan/music"
    }
  },
  "name": "ShootProof Studio API",
  "time": "2018-11-18T18:28:38+00:00",
  "type": "service-description"
}

Error Response

API errors come in two kinds of varieties: 400s and 500s.

Any error with a status code of 400 to 499 is considered a client error. This means it’s usually an error you can handle in your app, and then resend a modified request to the ShootProof API to get a successful response.

An error in the range of 500 to 599, on the other hand, is a different story. These errors usually mean that a problem occured on the server and resending the request with modifications will not fix the issue.

Pay careful attention to the status codes. We try to stick as close as possible to their defined semantics. For a complete list of HTTP status codes, take a look at the official HTTP Status Code Registry.

Check out our errors guide for more information.

Response Body

When the Content-Type of the response is application/problem+json, the following properties will be available in the response body.

Properties
Property Description
detail

A longer description of of the error encountered.

info

Additional information that may be provided to aid in error resolution.

Property Description
reason

An optional reason for the error response.

In some cases, more information is required to convey information about the error to the client. In these cases, one of the following reason slugs may be used.

Reason Slug Description
contract-not-ready-to-countersign The contract is in a state that does not allow countersigning. Its status must be ready-to-countersign to perform this action.
event-photo-count-limit The event has reached the maximum number of photos allowed.
plan-does-not-allow-uploads The studio is in a plan that does not allow uploads or they have reached the limit of photos the plan allows.
status

The HTTP status code associated with this error.

title

A short description of the error encountered.

type

A namespace URI uniquely identifying the error type.

Validation Error Example
{
  "detail": "There was a problem with your request. Please see `info` for more information.",
  "info": {
    "errors": {
      "type": {
        "isEmpty": "Value is required and can't be empty"
      }
    }
  },
  "status": 400,
  "title": "Bad Request",
  "type": "https://developer.shootproof.com/errors#error-bad-request"
}
Forbidden Error Example
{
  "detail": "You do not have permission to access the requested resource.",
  "status": 403,
  "title": "Forbidden",
  "type": "https://developer.shootproof.com/errors#error-forbidden"
}
Not Found Error Example
{
  "detail": "The requested resource could not be found.",
  "status": 404,
  "title": "Not Found",
  "type": "https://developer.shootproof.com/errors#error-not-found"
}
Server Error Example
{
  "detail": "An error occurred on the server. If this error continues to occur, please contact support.",
  "status": 500,
  "title": "Internal Server Error",
  "type": "https://developer.shootproof.com/errors#error-server-error"
}
Unauthorized Error Example
{
  "detail": "No authorization credentials provided. You must provide an authorization token for this request.",
  "status": 401,
  "title": "Unauthorized",
  "type": "https://developer.shootproof.com/errors#error-unauthorized"
}

OpenAPI Schema

The following schema is based on OpenAPI 3.0 and is provided in our downloadable OpenAPI document.

{
  "200": {
    "content": {
      "application/vnd.shootproof+json": {
        "example": {
          "contentType": [
            "application/vnd.shootproof+json"
          ],
          "links": {
            "brand": {
              "href": "https://api.shootproof.com/studio/brand{/id}",
              "templated": true
            },
            "email-template-type": {
              "href": "https://api.shootproof.com/studio/email/template-type{/id}{?resourceType,resourceId}",
              "templated": true
            },
            "language": {
              "href": "https://api.shootproof.com/studio/language"
            },
            "me": {
              "href": "https://api.shootproof.com/studio/me"
            },
            "playlist": {
              "href": "https://api.shootproof.com/studio/playlist{/id}",
              "templated": true
            },
            "price-sheet": {
              "href": "https://api.shootproof.com/studio/price-sheet{/id}",
              "templated": true
            },
            "self": {
              "href": "https://api.shootproof.com/studio/"
            },
            "signature": {
              "href": "https://api.shootproof.com/studio/signature{/id}",
              "templated": true
            },
            "song": {
              "href": "https://api.shootproof.com/studio/song"
            },
            "studio-music-plan": {
              "href": "https://api.shootproof.com/studio/plan/music"
            }
          },
          "name": "ShootProof Studio API",
          "time": "2018-11-18T18:28:38+00:00",
          "type": "service-description"
        },
        "schema": {
          "$ref": "#/components/schemas/ServiceDescription"
        }
      }
    },
    "description": "The service description."
  },
  "default": {
    "$ref": "#/components/responses/defaultError"
  }
}