spooky.mov api get spooked (opens in a new tab)

mark a film watched

report to spooky.mov that you watched a film. it will be added to your list of watches so that you can use it to inform future recommendations on your recents page, and optionally sort it out of recommendations that spooky makes.

POSThttps://spooky.mov/api/v1/watches

request

headers

headervalue
AuthorizationBearer spk_your_key
Content-Typeapplication/json

body parameters

parametertypedescription
tmdb_idintegerthe film’s tmdb id. the surest match.
imdb_idstringthe film’s imdb id, e.g. "tt0081505".
titlestringthe film’s title.
yearintegeroptional. the year it came out; makes a title match safer.
watched_datestringoptional. a day, "2026-10-17".
watched_atstring or integeroptional. a time, "2026-10-17T21:30:00Z", or unix seconds.

send one of tmdb_id, imdb_id or title. optionally submit a watch date. default value: when the request is received.

to send up to 100 at once, put them in watches:

{"watches": [{"tmdb_id": 694}, {"title": "Alien", "year": 1979, "watched_date": "2026-10-12"}]}

example

curl https://spooky.mov/api/v1/watches \
  -H "Authorization: Bearer spk_your_key" \
  -H "Content-Type: application/json" \
  -d '{"title": "The Shining", "year": 1980, "watched_date": "2026-10-17"}'

response

200 OK

{"received": 1, "saved": 1, "not_horror": 0, "not_found": 0}
fieldtypedescription
receivedintegerwatches in the request.
savedintegerhorror films marked watched.
not_horrorintegerfilms found that aren’t horror (not saved).
not_foundintegerfilms that couldn’t be matched.

errors

400 Bad Request

{"error": "bad_watch", "index": 1}
statuserrordescription
400bad_jsonthe body isn’t json.
400bad_watcha watch has no film, or a date that can’t be used (in the future, or not yyyy-mm-dd). index is its position. nothing is saved.
401bad_keyno key, or a revoked one.
404not_foundno such endpoint.
405method_not_alloweduse POST.
413too_largeover 64 kb.
415bad_typesend Content-Type: application/json.
429rate_limitedtoo many requests: wait a minute (Retry-After).
503unavailabletry again in a minute.