swagger: "2.0"
host: uebermaps.com
basePath: /api/v2
info:
  contact:
    name: uebermaps API Team
  description: Enable people to store spots on public and private maps
  termsOfService: https://uebermaps.com/terms/
  title: uebermaps API endpoints
  version: "2.0"
  x-apisguru-categories:
    - location
  x-logo:
    url: https://twitter.com/uebermaps/profile_image?size=original
  x-origin:
    - format: swagger
      url: https://uebermaps.com/api/v2/apidocs
      version: "2.0"
  x-providerName: uebermaps.com
consumes:
  - application/json
produces:
  - application/json
paths:
  /account:
    patch:
      description: Update account. Wrap map parameters in [user].
      parameters:
        - description: user attributes
          in: body
          name: user
          required: false
          schema:
            $ref: "#/definitions/UserEditable"
      responses:
        "200":
          description: Contains user data.
          schema:
            $ref: "#/definitions/User"
      summary: Update account
      tags:
        - Account
  "/attachments/{id}":
    delete:
      description: Delete attachment.
      parameters:
        - description: Attachment id
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains deleted attachment.
          schema:
            $ref: "#/definitions/Attachment"
      summary: Delete attachment
      tags:
        - Attachments
  /authentication:
    post:
      description: Sign in user. Wrap authentication parameters in [user].
      parameters:
        - description: user authentication attributes
          in: body
          name: user
          required: true
          schema:
            $ref: "#/definitions/UserAuthentication"
      responses:
        "200":
          description: Contains user data including authentication token for subsequent requests
          schema:
            $ref: "#/definitions/UserFullProfile"
      summary: Sign in user
      tags:
        - Authentication
  /collaborator_invitations:
    get:
      description: List your collaborator invitations.
      responses:
        "200":
          description: Contains list of collaborator invitations.
          schema:
            items:
              $ref: "#/definitions/CollaboratorInvitation"
            type: array
      summary: List your collaborator invitations
      tags:
        - CollaboratorInvitations
    post:
      description: Invite user to collaborate on map.
      parameters:
        - description: Supply map_id and either a comma separated list of user_ids or emails. Optionally you can provide a 'is_admin' parameter with 'true' or 'false' to give the invited users admin privileges.
          in: body
          name: body
          schema:
            $ref: "#/definitions/CollaboratorInvitationCreate"
      responses:
        "200":
          description: Contains collaborator invitation data.
          schema:
            $ref: "#/definitions/CollaboratorInvitation"
      summary: Invite user to collaborate on map
      tags:
        - CollaboratorInvitations
  "/collaborator_invitations/{id}":
    delete:
      description: Delete collaborator invitation.
      parameters:
        - description: Collaborator invitation id
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains deleted collaborator invitation.
          schema:
            $ref: "#/definitions/CollaboratorInvitation"
      summary: Delete collaborator invitation
      tags:
        - CollaboratorInvitations
    get:
      description: Show collaborator invitation
      parameters:
        - description: Collaborator invitation id
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains collaborator invitation data.
          schema:
            $ref: "#/definitions/CollaboratorInvitation"
      summary: Show collaborator invitation
      tags:
        - CollaboratorInvitations
    patch:
      description: Accept collaborator invitation.
      parameters:
        - description: Collaborator invitation id
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains collaborator invitation data.
          schema:
            $ref: "#/definitions/CollaboratorInvitation"
      summary: Accept collaborator invitation.
      tags:
        - CollaboratorInvitations
  "/comments/{id}":
    delete:
      description: Delete comment.
      parameters:
        - description: Comment id
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains deleted comment.
          schema:
            $ref: "#/definitions/Comment"
      summary: Delete comment
      tags:
        - Comments
    patch:
      description: Update comment. Wrap comment parameters in [comment].
      parameters:
        - description: Comment id
          in: path
          name: id
          required: true
          type: integer
        - description: Comment attributes
          in: body
          name: comment
          required: false
          schema:
            $ref: "#/definitions/CommentEditable"
      responses:
        "200":
          description: Contains comment data
          schema:
            $ref: "#/definitions/Comment"
      summary: Update comment
      tags:
        - Comments
  /events:
    get:
      description: List your own events.
      parameters:
        - description: Begin of time range of event (ISO 8601 date format).
          in: query
          name: timeframe_start
          required: false
          type: string
        - description: End of time range of event (ISO 8601 date format).
          in: query
          name: timeframe_end
          required: false
          type: string
        - description: "To refine your event index request to contain only events within                                                             a geographical box pass the followng bounds parameters.                                                             F. e. to get events within 'Hamburg, St. Pauli':                                                             bounds[sw_lat]=53.54831449741324                                                             bounds[sw_lon]=9.943227767944336                                                             bounds[ne_lat]=53.5571103674878                                                             bounds[ne_lon]=9.9776029586792"
          in: query
          name: bounds
          required: false
          type: string
      responses:
        "200":
          description: Contains list of events.
          schema:
            items:
              $ref: "#/definitions/Event"
            type: array
      summary: List your own events
      tags:
        - Events
  "/events/{id}":
    delete:
      description: Delete event.
      parameters:
        - description: Event id
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains deleted event.
          schema:
            $ref: "#/definitions/Event"
      summary: Delete event
      tags:
        - Events
    get:
      description: Get basic information about an event
      parameters:
        - description: Id of event
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains event data.
          schema:
            $ref: "#/definitions/Event"
      summary: Get event
      tags:
        - Events
    patch:
      description: Update event. Wrap event parameters in [event].
      parameters:
        - description: Event id
          in: path
          name: id
          required: true
          type: integer
        - description: Event attributes
          in: body
          name: event
          required: false
          schema:
            $ref: "#/definitions/EventEditable"
      responses:
        "200":
          description: Contains map data, map settings and your relation to this map
          schema:
            $ref: "#/definitions/Map"
      summary: Update event
      tags:
        - Events
  /maps:
    get:
      description: List your own maps.
      responses:
        "200":
          description: Contains list of maps.
          schema:
            items:
              $ref: "#/definitions/Map"
            type: array
      summary: List your own maps
      tags:
        - Maps
    post:
      description: Create map. Wrap map parameters in [map]. To add a map header picture pass a base64 encoded string to [map][picture].
      parameters:
        - description: map attributes
          in: body
          name: map
          required: false
          schema:
            $ref: "#/definitions/MapEditable"
      responses:
        "200":
          description: Contains map data, map settings and your relation to this map
          schema:
            $ref: "#/definitions/Map"
      summary: Create map
      tags:
        - Maps
  /maps/search:
    get:
      description: Search maps
      parameters:
        - description: Query
          in: query
          name: q
          type: string
        - description: "Distance. Diameter of search radius in meter (default: 2000 meter)"
          in: query
          name: d
          type: integer
        - description: "Latitude for search radius (default distance: 2000 meter)"
          in: query
          name: lat
          type: number
        - description: "Longitude for search radius (default distance: 2000 meter)"
          in: query
          name: lon
          type: number
      responses:
        "200":
          description: Contains map data.
          schema:
            $ref: "#/definitions/Map"
      summary: Search maps
      tags:
        - Search
  "/maps/{id}":
    delete:
      description: Delete map.
      parameters:
        - description: map id
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains deleted map.
          schema:
            $ref: "#/definitions/Map"
      summary: Delete map
      tags:
        - Maps
    get:
      description: Get basic information about a map
      parameters:
        - description: Id of map
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains map data, map settings and your relation to this map
          schema:
            $ref: "#/definitions/MapWithRelation"
      summary: Get map
      tags:
        - Maps
    patch:
      description: Update map. Wrap map parameters in [map]. To update the map header picture pass a base64 encoded string to [map][picture].
      parameters:
        - description: map id
          in: path
          name: id
          required: true
          type: integer
        - description: map settings attributes
          in: body
          name: map
          required: false
          schema:
            $ref: "#/definitions/MapEditable"
      responses:
        "200":
          description: Contains map data, map settings and your relation to this map
          schema:
            $ref: "#/definitions/Map"
      summary: Update map
      tags:
        - Maps
  "/maps/{id}/attachments":
    get:
      description: List attachments for a given map.
      parameters:
        - description: Map id
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains list of attachments.
          schema:
            items:
              $ref: "#/definitions/Attachment"
            type: array
      summary: List attachments for a given map
      tags:
        - Attachments
    post:
      description: Upload map attachment. Wrap attachment parameters in [attachment]
      parameters:
        - description: Map id
          in: path
          name: id
          required: true
          type: integer
        - description: Base64 encoded image
          in: body
          name: image
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Contains attachment data
          schema:
            $ref: "#/definitions/Attachment"
      summary: Upload map attachment
      tags:
        - Attachments
  "/maps/{id}/collaborators/":
    get:
      description: List collaborators of a map.
      parameters:
        - description: Map id
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains list of collaborators.
          schema:
            items:
              $ref: "#/definitions/Collaborator"
            type: array
      summary: List collaborators of a map
      tags:
        - Collaborators
  "/maps/{id}/collaborators/{user_id}":
    delete:
      description: Delete collaboration.
      parameters:
        - description: map id
          in: path
          name: id
          required: true
          type: integer
        - description: user id
          in: path
          name: user_id
          required: true
          type: integer
      responses:
        "200":
          description: Contains deleted collaborator.
          schema:
            $ref: "#/definitions/Collaborator"
      summary: Delete collaboration
      tags:
        - Collaborators
    patch:
      description: Update collaborator. Wrap collaborator parameters in [collaborator]
      parameters:
        - description: map id
          in: path
          name: id
          required: true
          type: integer
        - description: user id
          in: path
          name: user_id
          required: true
          type: integer
        - description: collaborator attributes
          in: body
          name: collaborator
          required: false
          schema:
            $ref: "#/definitions/CollaboratorEditable"
      responses:
        "200":
          description: Contains collaborator data
          schema:
            $ref: "#/definitions/Collaborator"
      summary: Update collaborator
      tags:
        - Collaborators
  "/maps/{id}/comments":
    get:
      description: List comments for a given map.
      parameters:
        - description: Id of map
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains list of comments.
          schema:
            items:
              $ref: "#/definitions/Comment"
            type: array
      summary: List comments for a given map
      tags:
        - Comments
    post:
      description: Create map comment. Wrap comment parameters in [comment].
      parameters:
        - description: map id
          in: path
          name: id
          required: true
          type: integer
        - description: comment attributes
          in: body
          name: comment
          required: false
          schema:
            $ref: "#/definitions/CommentEditable"
      responses:
        "200":
          description: Contains comment data
          schema:
            $ref: "#/definitions/Comment"
      summary: Create map comment
      tags:
        - Comments
  "/maps/{id}/respots":
    get:
      description: List respots of a map.
      parameters:
        - description: Map Id
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains list of respots.
          schema:
            items:
              $ref: "#/definitions/Respot"
            type: array
      summary: List respots of a map
      tags:
        - Respots
  "/maps/{id}/spots":
    get:
      description: List spots for a given map.
      parameters:
        - description: Id of map
          in: path
          name: id
          required: true
          type: integer
        - description: Order of spots
          enum:
            - created_at_asc
            - created_at_desc
            - updated_at_asc
            - updated_at_desc
            - title_asc
            - title_desc
          in: query
          name: order
          type: string
      responses:
        "200":
          description: Contains list of spots.
          schema:
            items:
              $ref: "#/definitions/Spot"
            type: array
      summary: List spots for a given map
      tags:
        - Spots
    post:
      description: Create spot. Wrap parameters in [spot]. To add a spot picture pass a base64 encoded string to [spot][picture].
      parameters:
        - description: Id of map
          in: path
          name: id
          required: true
          type: integer
        - description: spot attributes
          in: body
          name: spot
          required: true
          schema:
            $ref: "#/definitions/SpotEditable"
      responses:
        "200":
          description: Contains spot data
          schema:
            $ref: "#/definitions/Spot"
      summary: Create spot
      tags:
        - Spots
  "/maps/{id}/subscriptions":
    delete:
      description: Unsubscribe from map.
      parameters:
        - description: map id
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains deleted subscription.
          schema:
            $ref: "#/definitions/Subscription"
      summary: Unsubscribe from map
      tags:
        - Subscriptions
    get:
      description: List subscriptions for a given map.
      parameters:
        - description: Id of map
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains list of subscriptions.
          schema:
            items:
              $ref: "#/definitions/Subscription"
            type: array
      summary: List subscriptions for a given map
      tags:
        - Subscriptions
  "/maps/{map_id}/spots/{id}":
    get:
      description: Get basic information about a spot
      parameters:
        - description: Id of spot
          in: path
          name: id
          required: true
          type: integer
        - description: Id of map
          in: path
          name: map_id
          required: true
          type: integer
      responses:
        "200":
          description: Contains spot data
          schema:
            $ref: "#/definitions/Spot"
      summary: Get spot
      tags:
        - Spots
  "/maps/{map_id}/spots/{spot_id}/respot":
    delete:
      description: Delete respot from map by spot id.
      parameters:
        - description: Map Id
          in: path
          name: map_id
          required: true
          type: integer
        - description: Spot Id
          in: path
          name: spot_id
          required: true
          type: integer
      responses:
        "200":
          description: Contains deleted respot.
          schema:
            $ref: "#/definitions/Respot"
      summary: Delete respot from map by spot id
      tags:
        - Respots
  /respot_maps:
    get:
      description: List maps that user can respot to.
      responses:
        "200":
          description: Contains list of maps.
          schema:
            items:
              $ref: "#/definitions/Map"
            type: array
      summary: List maps that user can respot to
      tags:
        - Respots
  "/respots/{id}":
    delete:
      description: Delete respot.
      parameters:
        - description: Respot Id
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains deleted respot.
          schema:
            $ref: "#/definitions/Respot"
      summary: Delete respot
      tags:
        - Respots
    get:
      description: Get basic information about a respot
      parameters:
        - description: Id of respot
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains respot data.
          schema:
            $ref: "#/definitions/Respot"
      summary: Get respot
      tags:
        - Respots
  "/share/map/{id}":
    get:
      description: Get secret access token of an uebermap with access set to 'Secret link'. Pass the 'token' on every request you make to access this uebermap and its resources. F.e. token=1-x_gqu7eLBe3uKoAGAGXy
      parameters:
        - description: Id of map
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains map data and a secret token to access this map.
          schema:
            $ref: "#/definitions/MapWithAuthToken"
      summary: Get secret access token to share map
      tags:
        - Share
  /spots:
    get:
      description: List your own spots.
      parameters:
        - description: Order of spots
          enum:
            - created_at_asc
            - created_at_desc
            - updated_at_asc
            - updated_at_desc
            - title_asc
            - title_desc
          in: query
          name: order
          type: string
      responses:
        "200":
          description: Contains list of spots.
          schema:
            items:
              $ref: "#/definitions/Spot"
            type: array
      summary: List your own spots
      tags:
        - Spots
  /spots/search:
    get:
      description: Search spots
      parameters:
        - description: Query
          in: query
          name: q
          type: string
        - description: "Distance. Diameter of search radius in meter (default: 2000 meter)"
          in: query
          name: d
          type: integer
        - description: Latitude for search radius (2 km)
          in: query
          name: lat
          type: number
        - description: Longitude for search radius (2 km)
          in: query
          name: lon
          type: number
      responses:
        "200":
          description: Contains spot data.
          schema:
            $ref: "#/definitions/Spot"
      summary: Search spots
      tags:
        - Search
  "/spots/{id}":
    delete:
      description: Delete spot.
      parameters:
        - description: spot id
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains deleted spot.
          schema:
            $ref: "#/definitions/Spot"
      summary: Delete spot
      tags:
        - Spots
    patch:
      description: Update spot. Wrap parameters in [spot]. To update the spot picture pass a base64 encoded string to [spot][picture].
      parameters:
        - description: spot id
          in: path
          name: id
          required: true
          type: integer
        - description: spot attributes
          in: body
          name: spot
          required: false
          schema:
            $ref: "#/definitions/SpotEditable"
      responses:
        "200":
          description: Contains spot data
          schema:
            $ref: "#/definitions/Spot"
      summary: Update spot
      tags:
        - Spots
  "/spots/{id}/attachments":
    get:
      description: List attachments for a given spot.
      parameters:
        - description: Spot id
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains list of attachments.
          schema:
            items:
              $ref: "#/definitions/Attachment"
            type: array
      summary: List attachments for a given spot
      tags:
        - Attachments
    post:
      description: Upload spot attachment. Wrap attachment parameters in [attachment]
      parameters:
        - description: Spot id
          in: path
          name: id
          required: true
          type: integer
        - description: Base64 encoded image
          in: body
          name: image
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Contains attachment data
          schema:
            $ref: "#/definitions/Attachment"
      summary: Upload spot attachment
      tags:
        - Attachments
  "/spots/{id}/comments":
    get:
      description: List comments for a given spot.
      parameters:
        - description: Id of spot
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains list of comments.
          schema:
            items:
              $ref: "#/definitions/Comment"
            type: array
      summary: List comments for a given spot
      tags:
        - Comments
    post:
      description: Create spot comment. Wrap comment parameters in [comment].
      parameters:
        - description: spot id
          in: path
          name: id
          required: true
          type: integer
        - description: comment attributes
          in: body
          name: comment
          required: false
          schema:
            $ref: "#/definitions/CommentEditable"
      responses:
        "200":
          description: Contains comment data
          schema:
            $ref: "#/definitions/Comment"
      summary: Create spot comment
      tags:
        - Comments
  "/spots/{id}/events":
    get:
      description: List maps for a given spot.
      parameters:
        - description: Id of spot
          in: path
          name: id
          required: true
          type: integer
        - description: Begin of time range of event (ISO 8601 date format).
          in: query
          name: timeframe_start
          required: false
          type: string
        - description: End of time range of event (ISO 8601 date format).
          in: query
          name: timeframe_end
          required: false
          type: string
        - description: "To refine your event index request to contain only events within                                                             a geographical box pass the followng bounds parameters.                                                             F. e. to get events within 'Hamburg, St. Pauli':                                                             bounds[sw_lat]=53.54831449741324                                                             bounds[sw_lon]=9.943227767944336                                                             bounds[ne_lat]=53.5571103674878                                                             bounds[ne_lon]=9.9776029586792"
          in: query
          name: bounds
          required: false
          type: string
      responses:
        "200":
          description: Contains list of events.
          schema:
            items:
              $ref: "#/definitions/Event"
            type: array
      summary: List events for a given spot
      tags:
        - Events
    post:
      description: Create event. Wrap map parameters in [event].
      parameters:
        - description: Spot id
          in: path
          name: id
          required: true
          type: integer
        - description: Event attributes
          in: body
          name: event
          required: false
          schema:
            $ref: "#/definitions/EventEditable"
      responses:
        "200":
          description: Contains event data
          schema:
            $ref: "#/definitions/Event"
      summary: Create event
      tags:
        - Events
  "/spots/{id}/respots":
    post:
      description: Respot a spot onto a map.
      parameters:
        - description: Spot Id
          in: path
          name: id
          required: true
          type: integer
        - description: Map Id
          in: body
          name: map_id
          required: true
          schema:
            format: integer
            type: number
      responses:
        "200":
          description: Contains respot data.
          schema:
            $ref: "#/definitions/Respot"
      summary: Respot a spot onto a map
      tags:
        - Respots
  /subscriptions:
    get:
      description: List subscriptions.
      parameters:
        - description: Id of user
          in: query
          name: user_id
          type: integer
        - description: Id of map
          in: query
          name: map_id
          type: integer
      responses:
        "200":
          description: Contains list of subscriptions.
          schema:
            items:
              $ref: "#/definitions/Subscription"
            type: array
      summary: List subscriptions. Pass no parameters to get own subscriptions
      tags:
        - Subscriptions
    post:
      description: Create map subscription.
      parameters:
        - description: map id
          in: body
          name: map_id
          required: true
          schema:
            format: integer
            type: number
      responses:
        "200":
          description: Contains subscription data.
          schema:
            $ref: "#/definitions/Subscription"
      summary: Create map subscription
      tags:
        - Subscriptions
  /trends/latest:
    get:
      description: List latest maps.
      responses:
        "200":
          description: Contains list of maps.
          schema:
            items:
              $ref: "#/definitions/Map"
            type: array
      summary: List latest maps
      tags:
        - Trends
  /trends/recommended:
    get:
      description: List recommended maps.
      responses:
        "200":
          description: Contains list of maps.
          schema:
            items:
              $ref: "#/definitions/Map"
            type: array
      summary: List recommended maps
      tags:
        - Trends
  /users/search:
    get:
      description: Search users
      parameters:
        - description: Query
          in: query
          name: q
          type: string
      responses:
        "200":
          description: Contains users data.
          schema:
            $ref: "#/definitions/User"
      summary: Search users
      tags:
        - Search
  "/users/{id}":
    get:
      description: Get profile a user
      parameters:
        - description: Id of user
          in: path
          name: id
          required: true
          type: integer
      responses:
        "200":
          description: Contains user data
          schema:
            $ref: "#/definitions/User"
      summary: Get user profile
      tags:
        - Users
  "/users/{user_id}/maps":
    get:
      description: List maps for a given user.
      parameters:
        - description: Id of user
          in: path
          name: user_id
          required: true
          type: integer
      responses:
        "200":
          description: Contains list of maps.
          schema:
            items:
              $ref: "#/definitions/Map"
            type: array
      summary: List maps for a given user
      tags:
        - Maps
definitions:
  Attachment:
    properties:
      attachable_id:
        example: 7543829
        type: integer
      attachable_type:
        example: Spot
        type: string
      created_at:
        format: date-time
        type: string
      description:
        example: This photo was taken in front of the restaurant
        type: string
      file_url:
        example: https://...
        type: string
      id:
        example: 34939432
        type: integer
      map_id:
        example: 985732
        type: integer
      sizes:
        example:
          large:
            h: 860
            w: 1024
        type: object
      spot:
        $ref: "#/definitions/Spot"
      status:
        enum:
          - approved
          - unapproved
        example: approved
        type: string
      user:
        $ref: "#/definitions/User"
  Collaborator:
    properties:
      created_at:
        format: date-time
        type: string
      group:
        enum:
          - admin
          - editor
        example: editor
        type: string
      id:
        example: 4829504
        type: integer
      is_admin:
        example: false
        type: boolean
      map:
        $ref: "#/definitions/Map"
      map_id:
        example: 324894
        type: integer
      updated_at:
        format: date-time
        type: string
      user:
        $ref: "#/definitions/User"
      user_id:
        example: 649302
        type: integer
  CollaboratorEditable:
    properties:
      group:
        enum:
          - admin
          - editor
        example: editor
        type: string
  CollaboratorInvitation:
    properties:
      accepted:
        example: true
        type: boolean
      created_at:
        format: date-time
        type: string
      email:
        example: a@b.com
        type: string
      group:
        enum:
          - admin
          - editor
        example: editor
        type: string
      id:
        example: 8696493
        type: integer
      invited_by_user:
        $ref: "#/definitions/User"
      map:
        $ref: "#/definitions/Map"
      sent:
        example: true
        type: boolean
      updated_at:
        format: date-time
        type: string
      user:
        $ref: "#/definitions/User"
  CollaboratorInvitationCreate:
    properties:
      emails:
        example: a@b.com, c@d.com, e@f.com
        type: string
      is_admin:
        example: true
        type: boolean
      map_id:
        example: 34925783
        type: integer
      user_ids:
        example: 5839459, 389423, 89494, 686950
        type: string
  Comment:
    properties:
      body:
        example: Nice photo
        type: string
      created_at:
        format: date-time
        type: string
      id:
        example: 29628358
        type: integer
      status:
        enum:
          - approved
          - unapproved
        example: approved
        type: string
      updated_at:
        format: date-time
        type: string
      user:
        $ref: "#/definitions/User"
  CommentEditable:
    properties:
      body:
        example: Nice photo
        type: string
  Event:
    properties:
      counts:
        $ref: "#/definitions/EventCounts"
      created_at:
        format: date-time
        type: string
      description:
        example: Very special event
        type: string
      ends_at:
        format: date-time
        type: string
      id:
        example: 482959
        type: integer
      lat:
        example: 53.293493
        type: number
      lon:
        example: 12.394328
        type: number
      owner_id:
        example: 82389429
        type: integer
      picture_url:
        example: https://...
        type: string
      spot:
        $ref: "#/definitions/Spot"
      starts_at:
        format: date-time
        type: string
      time_zone:
        example: Berlin
        type: string
      title:
        example: 20th anniversary event
        type: string
      updated_at:
        format: date-time
        type: string
      user:
        $ref: "#/definitions/User"
  EventCounts:
    properties:
      attachments:
        example: 27
        type: integer
      comments:
        example: 284
        type: integer
  EventEditable:
    properties:
      description:
        example: Very special event
        type: string
      ends_at:
        format: date-time
        type: string
      lat:
        example: 53.293493
        type: number
      lon:
        example: 12.394328
        type: number
      picture:
        example: <BASE_64_ENCODED_STRING>
        type: string
      starts_at:
        format: date-time
        type: string
      time_zone:
        example: Berlin
        type: string
      title:
        example: 20th anniversary event
        type: string
      user_id:
        example: 703943
        type: integer
  Map:
    properties:
      counts:
        $ref: "#/definitions/MapCounts"
      created_at:
        format: date-time
        type: string
      description:
        example: A collection of restaurants, cafes, clubs and random spots that I recommend in Berlin
        type: string
      id:
        example: 18234843
        type: integer
      map_settings:
        $ref: "#/definitions/MapSettings"
      owner_id:
        example: 9829358
        type: integer
      picture_url:
        example: https://...
        type: string
      title:
        example: My favourite places in Berlin
        type: string
      updated_at:
        format: date-time
        type: string
      visibility:
        enum:
          - public
          - link
          - private
        example: public
        type: string
  MapCounts:
    properties:
      attachments:
        example: 31
        type: integer
      comments:
        example: 234
        type: integer
      impressions:
        example: 234332
        type: integer
      respots:
        example: 24
        type: integer
      spots:
        example: 67
        type: integer
      subscriptions:
        example: 3892
        type: integer
  MapEditable:
    properties:
      description:
        example: A collection of restaurants, cafes, clubs and random spots that I recommend in Berlin
        type: string
      map_settings:
        $ref: "#/definitions/MapSettings"
      picture:
        example: <BASE_64_ENCODED_STRING>
        type: string
      title:
        example: My favourite places in Berlin
        type: string
      visibility:
        enum:
          - public
          - link
          - private
        example: public
        type: string
  MapRelation:
    properties:
      access:
        example:
          - can_administer.map
          - can_administer.spots
          - can_administer.events
          - can_administer.comments
          - can_administer.attachments
          - can_administer.collaborators
        type: string
      access_group:
        enum:
          - visitor
          - editor
          - admin
        example: owner
        type: string
      subscribed:
        example: true
        type: boolean
  MapSettings:
    properties:
      editor_access:
        example:
          - can_administer.map
          - can_administer.spots
          - can_administer.events
          - can_administer.comments
          - can_administer.attachments
          - can_administer.collaborators
        type: string
      respotting_to_this_map:
        example: true
        type: boolean
      visitor_access:
        example:
          - can_administer.map
          - can_administer.spots
          - can_administer.events
          - can_administer.comments
          - can_administer.attachments
          - can_administer.collaborators
        type: string
  MapWithAuthToken:
    properties:
      counts:
        $ref: "#/definitions/MapCounts"
      created_at:
        format: date-time
        type: string
      description:
        example: A collection of restaurants, cafes, clubs and random spots that I recommend in Berlin
        type: string
      id:
        example: 18234843
        type: integer
      owner_id:
        example: 9829358
        type: integer
      picture_url:
        example: https://...
        type: string
      title:
        example: My favourite places in Berlin
        type: string
      token:
        example: 1-x_gqu7eLBe3uKoAGAGXy
        type: string
      updated_at:
        format: date-time
        type: string
      visibility:
        enum:
          - public
          - link
          - private
        example: public
        type: string
  MapWithRelation:
    properties:
      counts:
        $ref: "#/definitions/MapCounts"
      created_at:
        format: date-time
        type: string
      description:
        example: A collection of restaurants, cafes, clubs and random spots that I recommend in Berlin
        type: string
      id:
        example: 18234843
        type: integer
      map_settings:
        $ref: "#/definitions/MapSettings"
      owner_id:
        example: 9829358
        type: integer
      picture_url:
        example: https://...
        type: string
      relation:
        $ref: "#/definitions/MapRelation"
      title:
        example: My favourite places in Berlin
        type: string
      updated_at:
        format: date-time
        type: string
      visibility:
        enum:
          - public
          - link
          - private
        example: public
        type: string
  Respot:
    properties:
      created_at:
        format: date-time
        type: string
      id:
        example: 589032
        type: integer
      map:
        $ref: "#/definitions/Map"
      map_id:
        example: 8393450
        type: integer
      spot:
        $ref: "#/definitions/Spot"
      updated_at:
        format: date-time
        type: string
      user:
        $ref: "#/definitions/User"
  Spot:
    properties:
      counts:
        $ref: "#/definitions/SpotCounts"
      created_at:
        format: date-time
        type: string
      description:
        example: Landed here by accident but look how wonderful this place is in the photos attached
        type: string
      id:
        example: 5932234
        type: integer
      lat:
        example: 53.112385
        type: number
      lon:
        example: 10.58349
        type: number
      map_id:
        example: 394805
        type: integer
      picture_url:
        example: https://...
        type: string
      status:
        enum:
          - approved
          - unapproved
        example: approved
        type: string
      time_zone:
        example: Berlin
        type: string
      title:
        example: Beautiful place out in the country
        type: string
      updated_at:
        format: date-time
        type: string
      user:
        $ref: "#/definitions/User"
  SpotCounts:
    properties:
      attachments:
        example: 4
        type: integer
      comments:
        example: 24
        type: integer
      respot:
        example: 34
        type: integer
  SpotEditable:
    properties:
      description:
        example: Landed here by accident but look how wonderful this place is in the photos attached
        type: string
      lat:
        example: 53.112385
        type: number
      lon:
        example: 10.58349
        type: number
      picture:
        example: <BASE_64_ENCODED_STRING>
        type: string
      time_zone:
        example: Berlin
        type: string
      title:
        example: Beautiful place out in the country
        type: string
  Subscription:
    properties:
      created_at:
        format: date-time
        type: string
      id:
        example: 23950552
        type: integer
      map:
        $ref: "#/definitions/Map"
      updated_at:
        format: date-time
        type: string
      user:
        $ref: "#/definitions/User"
      user_id:
        example: 852002
        type: integer
  User:
    properties:
      about:
        example: The comedian
        type: string
      counts:
        properties:
          maps:
            example: 24
            type: integer
      header_picture:
        example: https://...
        type: string
      id:
        example: 5829035
        type: integer
      location:
        example: Little Rock, Arkansas
        type: string
      name:
        example: Bill Hicks
        type: string
      picture_url:
        example: https://...
        type: string
      screen_name:
        example: billhicks
        type: string
      url:
        example: http://www.billhicks.com
        type: string
  UserAuthentication:
    properties:
      email:
        example: a@b.com
        type: string
      password:
        example: ••••••••
        type: string
  UserEditable:
    properties:
      about:
        example: The comedian
        type: string
      header:
        example: <BASE_64_ENCODED_STRING>
        type: string
      language:
        example: en
        type: string
      location:
        example: Little Rock, Arkansas
        type: string
      name:
        example: Bill Hicks
        type: string
      picture:
        example: <BASE_64_ENCODED_STRING>
        type: string
      screen_name:
        example: billhicks
        type: string
      time_zone:
        example: Pacific Time (US & Canada)
        type: string
      url:
        example: http://www.billhicks.com
        type: string
  UserFullProfile:
    allOf:
      - $ref: "#/definitions/User"
    properties:
      auth_token:
        example: 6g8as82h3kj23h2
        type: string
      language:
        example: en
        type: string
      time_zone:
        example: Pacific Time (US & Canada)
        type: string
