Contribly icon

Contribly

Connect to Contribly with 1 MCP tools for AI-powered API automation.

COMMUNITYBEARER0 INSTALLS
OpenAPI Specificationv3.0
{
  "openapi": "3.0.0",
  "servers": [
    {
      "url": "https://api.contribly.com/1"
    }
  ],
  "info": {
    "contact": {
      "x-twitter": "contribly"
    },
    "title": "Contribly",
    "version": "1.0.0",
    "x-apisguru-categories": [
      "social"
    ],
    "x-logo": {
      "url": "https://api.apis.guru/v2/cache/logo/https_twitter.com_contribly_profile_image.png"
    },
    "x-origin": [
      {
        "format": "openapi",
        "url": "https://api.contribly.com/1/swagger.json",
        "version": "3.0"
      }
    ],
    "x-providerName": "contribly.com"
  },
  "tags": [
    {
      "description": "Create and list assignments",
      "name": "assignment"
    },
    {
      "description": "Submit, moderate and retrieve user contributions",
      "name": "contribution"
    },
    {
      "description": "Create and edit forms",
      "name": "form"
    },
    {
      "description": "Submit media",
      "name": "media"
    },
    {
      "description": "Notifications are templated email messages which can be sent to contributors. A notification might be used to request further information from a contributor or inform them when their contribution has been published.",
      "name": "notifications"
    },
    {
      "description": "Subscribe to be alerted when events occur. For example receive email notification when a contribution is flagged.",
      "name": "subscriptions"
    },
    {
      "description": "Create and list tags and tag sets",
      "name": "tag"
    },
    {
      "description": "Manage users",
      "name": "user"
    },
    {
      "description": "Authentication related",
      "name": "auth"
    }
  ],
  "paths": {
    "/artifact-formats": {
      "get": {
        "description": "List the available artifact formats",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArtifactFormats"
                }
              }
            },
            "description": "A list of artifact formats"
          }
        },
        "summary": "Artifact formats",
        "tags": [
          "info"
        ]
      }
    },
    "/assignments": {
      "get": {
        "parameters": [
          {
            "description": "Restrict results to assignments owned by this user.",
            "in": "query",
            "name": "ownedBy",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Pagination page",
            "in": "query",
            "name": "page",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Pagination page size",
            "in": "query",
            "name": "pageSize",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Restrict results to assignments whose name or description matches this keyword.",
            "in": "query",
            "name": "q",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Select an assignment by urlWords.",
            "in": "query",
            "name": "urlWords",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Select open or closed assignments",
            "in": "query",
            "name": "open",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Select assignments with no closing date.",
            "in": "query",
            "name": "alwaysOpen",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Restrict results to assignments which are tagged with this tag.",
            "in": "query",
            "name": "tag",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to the assignment (or potentially assignments) with this exact name",
            "in": "query",
            "name": "name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Assignment"
                  },
                  "type": "array"
                }
              }
            },
            "description": "A list of assignments",
            "headers": {
              "X-total-count": {
                "description": "Total number of matching contributions",
                "schema": {
                  "type": "number"
                }
              }
            }
          }
        },
        "summary": "List assignments",
        "tags": [
          "assignment"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignmentSubmission"
              }
            }
          },
          "description": "Assignment object to be created",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Assignment"
                }
              }
            },
            "description": "Assignment created"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "The new assignment vailed to validate. Check the response body for details."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Failed to create the new assignment due to an unexpected error."
          }
        },
        "summary": "Create a new assignment",
        "tags": [
          "assignment"
        ]
      }
    },
    "/assignments/{id}": {
      "delete": {
        "parameters": [
          {
            "description": "Id of the assignment to return",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Assignment deleted"
          },
          "403": {
            "description": "Not permitted to delete this assignment."
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Delete this assignment and all of it's contributions",
        "tags": [
          "assignment"
        ]
      },
      "get": {
        "parameters": [
          {
            "description": "Id of the assignment to return",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Assignment"
                }
              }
            },
            "description": "Assignment found"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Get a single assigment by id",
        "tags": [
          "assignment"
        ]
      }
    },
    "/change-log": {
      "get": {
        "description": "The Contribly change log.",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/ChangeLogItem"
                  },
                  "type": "array"
                }
              }
            },
            "description": "A list of change log items"
          }
        },
        "summary": "Recent changes",
        "tags": [
          "info"
        ]
      }
    },
    "/contribution-refinement-types": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              }
            },
            "description": "An array of refinement types. These are the possible values of the get contribution refinements parameter."
          }
        },
        "summary": "List valid contribution refinement types",
        "tags": [
          "contribution"
        ]
      }
    },
    "/contribution-refinements": {
      "get": {
        "description": "Given a contribution list query determine the available filter options. Can be used to generate the UI to refinement a filter.",
        "parameters": [
          {
            "description": "Restrict results to contributions submitted to this assignment.",
            "in": "query",
            "name": "assignment",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit results to contributions which have a publicly visible location within the given country (specified by two letter country code).",
            "in": "query",
            "name": "country",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit results to contributions created before this date time.",
            "in": "query",
            "name": "createdBefore",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "Limit results to contributions created after this date time.",
            "in": "query",
            "name": "createdAfter",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions which have specified a location which falls within this geohash (or comma seperated list of multiple geohashes)",
            "in": "query",
            "name": "geohash",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions which have a publicly visible location.",
            "in": "query",
            "name": "hasLocation",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Limit results to contributions with location near this latitude and longitude (comma seperated lat/long pair). Also see radius",
            "in": "query",
            "name": "latLong",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "When limiting result by location with the latLong parameter, specify the radius in kilometers.",
            "in": "query",
            "name": "radius",
            "required": false,
            "schema": {
              "format": "double",
              "type": "number"
            }
          },
          {
            "description": "Restrict results to contributions which include a media file of the given type (ie. image / video)",
            "in": "query",
            "name": "mediaType",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions which are fall under the jurisdiction by this user.",
            "in": "query",
            "name": "ownedBy",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions whose headline text matches this keyword.",
            "in": "query",
            "name": "q",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Locate a specific contribution by URL words",
            "in": "query",
            "name": "urlWords",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions by this user identified by id.",
            "in": "query",
            "name": "user",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma seperated list of refinement names.",
            "in": "query",
            "name": "refinements",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of refinement options to return.",
            "in": "query",
            "name": "refinementSize",
            "required": false,
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "type": "object"
                }
              }
            },
            "description": "A map of refinement names to lists of options"
          }
        },
        "summary": "List contribution refinement options",
        "tags": [
          "contribution"
        ]
      }
    },
    "/contributions": {
      "get": {
        "description": "Retrieve contributions.",
        "parameters": [
          {
            "description": "Restrict results to contributions submitted to this assignment.",
            "in": "query",
            "name": "assignment",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit results to contributions which have a publicly visible location within the given country (specified by two letter country code).",
            "in": "query",
            "name": "country",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit results to contributions created before this date time.",
            "in": "query",
            "name": "createdBefore",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "Limit results to contributions created after this date time.",
            "in": "query",
            "name": "createdAfter",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "Limit results to contributions created on this day.",
            "in": "query",
            "name": "createdDay",
            "required": false,
            "schema": {
              "format": "date",
              "type": "string"
            }
          },
          {
            "description": "Limit results to contributions created during this month.",
            "in": "query",
            "name": "createdMonth",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions which have specified a location which falls within this geohash (or comma seperated list of multiple geohashes)",
            "in": "query",
            "name": "geohash",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions which have a publicly visible location.",
            "in": "query",
            "name": "hasLocation",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Limit results to contributions with location near this latitude and longitude (comma seperated lat/long pair). Also see radius",
            "in": "query",
            "name": "latLong",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "When limiting result by location with the latLong parameter, specify the radius in kilometers.",
            "in": "query",
            "name": "radius",
            "required": false,
            "schema": {
              "format": "double",
              "type": "number"
            }
          },
          {
            "description": "Restrict results to contributions which include a media file of the given type (ie. image / video)",
            "in": "query",
            "name": "mediaType",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions which are fall under the jurisdiction by this user.",
            "in": "query",
            "name": "ownedBy",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions whose headline text matches this keyword.",
            "in": "query",
            "name": "q",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Locate a specific contribution by URL words",
            "in": "query",
            "name": "urlWords",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions by this user identified by id.",
            "in": "query",
            "name": "user",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to a list of specific contributions identified by a comma seperated list of ids.",
            "in": "query",
            "name": "ids",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Select output format. 'json' or 'rss'. Defaults to JSON.",
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Contribution"
                  },
                  "type": "array"
                }
              }
            },
            "description": "A list of contributions"
          }
        },
        "summary": "List contributions",
        "tags": [
          "contribution"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Contribution"
              }
            }
          },
          "description": "Contribution object to be created",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Contribution"
                }
              }
            },
            "description": "Contribution created"
          }
        },
        "security": [
          {
            "oauth": [
              "full"
            ]
          }
        ],
        "summary": "Create a new contribution",
        "tags": [
          "contribution"
        ]
      }
    },
    "/contributions/{id}": {
      "delete": {
        "parameters": [
          {
            "description": "Id of the contribution to delete",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Contribution"
                }
              }
            },
            "description": "The deletion request has been accepted and will be processed in the background."
          },
          "403": {
            "description": "The currently authorised user is not allowed to delete this contribution."
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Delete this contribution",
        "tags": [
          "contribution"
        ]
      },
      "get": {
        "parameters": [
          {
            "description": "Id of the contribution to return",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Contribution"
                }
              }
            },
            "description": "Successful"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Get a single contribution by id",
        "tags": [
          "contribution"
        ]
      }
    },
    "/contributions/{id}/flag": {
      "post": {
        "description": "Allows end users to bring potential issues with publicly visible content to the attention of moderators.",
        "parameters": [
          {
            "description": "Id of the contribution to flag",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Flag"
              }
            }
          },
          "description": "Flag to be created",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Flag"
                }
              }
            },
            "description": "Flag created"
          }
        },
        "summary": "Raise a flag against this contribution",
        "tags": [
          "contribution"
        ]
      }
    },
    "/contributions/{id}/like": {
      "post": {
        "parameters": [
          {
            "description": "Id of the contribution",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "number"
                }
              }
            },
            "description": "The updated like count for this contribution."
          }
        },
        "summary": "Allows a user to mark a contribution as liked",
        "tags": [
          "contribution"
        ]
      }
    },
    "/contributions/{id}/likes": {
      "get": {
        "description": "Returns a list of user ids of users who have liked this conribution",
        "parameters": [
          {
            "description": "Id of the contribution",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              }
            },
            "description": "A list of user ids."
          }
        },
        "summary": "List users who have liked this contributions",
        "tags": [
          "contribution"
        ]
      }
    },
    "/contributions/{id}/moderate": {
      "post": {
        "description": "Allows the contribution to approved of rejected.",
        "parameters": [
          {
            "description": "Id of the contribution to moderate",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ModerationHistoryItemSubmission"
              }
            }
          },
          "description": "A moderation action",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "The moderation action was successfully applied"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "The submission falied to validate. Check the response body for details."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "The request was not correctly authorised."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "You do not have permission to perform this moderation action."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "An unexpected error occurred."
          }
        },
        "summary": "Perform a moderation action on this contribution",
        "tags": [
          "contribution"
        ]
      }
    },
    "/credentials": {
      "get": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Credential"
                  },
                  "type": "array"
                }
              }
            },
            "description": "A list of credentials associated with this user."
          },
          "401": {
            "description": "Not authorised"
          }
        },
        "summary": "List the credentials associated with the authenticated user.",
        "tags": [
          "auth"
        ]
      }
    },
    "/event-types": {
      "get": {
        "description": "List available notification event types",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/EventType"
                  },
                  "type": "array"
                }
              }
            },
            "description": "A list of event types"
          }
        },
        "summary": "Event types",
        "tags": [
          "info"
        ]
      }
    },
    "/export": {
      "post": {
        "description": "Begin an export job. Returns a export job which can be polled to follow the progress of an export.",
        "parameters": [
          {
            "description": "Restrict results to contributions submitted to this assignment.",
            "in": "query",
            "name": "assignment",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit results to contributions which have a publicly visible location within the given country (specified by two letter country code).",
            "in": "query",
            "name": "country",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit results to contributions created before this date time.",
            "in": "query",
            "name": "createdBefore",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "Limit results to contributions created after this date time.",
            "in": "query",
            "name": "createdAfter",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions which have specified a location which falls within this geohash (or comma seperated list of multiple geohashes)",
            "in": "query",
            "name": "geohash",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions which have a publicly visible location.",
            "in": "query",
            "name": "hasLocation",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Limit results to contributions with location near this latitude and longitude (comma seperated lat/long pair). Also see radius",
            "in": "query",
            "name": "latLong",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "When limiting result by location with the latLong parameter, specify the radius in kilometers.",
            "in": "query",
            "name": "radius",
            "required": false,
            "schema": {
              "format": "double",
              "type": "number"
            }
          },
          {
            "description": "Restrict results to contributions which include a media file of the given type (ie. image / video)",
            "in": "query",
            "name": "mediaType",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions which are fall under the jurisdiction by this user.",
            "in": "query",
            "name": "ownedBy",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions whose headline text matches this keyword.",
            "in": "query",
            "name": "q",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Locate a specific contribution by URL words",
            "in": "query",
            "name": "urlWords",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions by this user identified by id.",
            "in": "query",
            "name": "user",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Should exported media files be tagged with metadata. Deprecated; use format instead.",
            "in": "query",
            "name": "tagged",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Included a combined file with all contribution text.",
            "in": "query",
            "name": "combined",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Include individual text files for each contribution.",
            "in": "query",
            "name": "individual",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Media format to export; none, fullsize, tagged or original.",
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Include raw JSON for each contribution.",
            "in": "query",
            "name": "json",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Export"
                }
              }
            },
            "description": "An export job describing the state of an export job."
          }
        },
        "summary": "Export contributions.",
        "tags": [
          "contribution"
        ]
      }
    },
    "/export-summary": {
      "post": {
        "description": "Provide a preflight summary of an export request.",
        "parameters": [
          {
            "description": "Restrict results to contributions submitted to this assignment.",
            "in": "query",
            "name": "assignment",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit results to contributions which have a publicly visible location within the given country (specified by two letter country code).",
            "in": "query",
            "name": "country",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit results to contributions created before this date time.",
            "in": "query",
            "name": "createdBefore",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "Limit results to contributions created after this date time.",
            "in": "query",
            "name": "createdAfter",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions which have specified a location which falls within this geohash (or comma seperated list of multiple geohashes)",
            "in": "query",
            "name": "geohash",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions which have a publicly visible location.",
            "in": "query",
            "name": "hasLocation",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "Limit results to contributions with location near this latitude and longitude (comma seperated lat/long pair). Also see radius",
            "in": "query",
            "name": "latLong",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "When limiting result by location with the latLong parameter, specify the radius in kilometers.",
            "in": "query",
            "name": "radius",
            "required": false,
            "schema": {
              "format": "double",
              "type": "number"
            }
          },
          {
            "description": "Restrict results to contributions which include a media file of the given type (ie. image / video)",
            "in": "query",
            "name": "mediaType",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions which are fall under the jurisdiction by this user.",
            "in": "query",
            "name": "ownedBy",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions whose headline text matches this keyword.",
            "in": "query",
            "name": "q",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Locate a specific contribution by URL words",
            "in": "query",
            "name": "urlWords",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to contributions by this user identified by id.",
            "in": "query",
            "name": "user",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportSummary"
                }
              }
            },
            "description": "A summary of the number of contributions, media files and approximate total size of media files."
          }
        },
        "summary": "Export contributions preflight summary.",
        "tags": [
          "contribution"
        ]
      }
    },
    "/exports/{id}": {
      "get": {
        "parameters": [
          {
            "description": "Id of the export job to return",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Export"
                }
              }
            },
            "description": "Successful"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Get a single export job; poll to follow export progress.",
        "tags": [
          "contribution"
        ]
      }
    },
    "/form-responses": {
      "get": {
        "parameters": [
          {
            "description": "Restrict results to responses submitted by this user.",
            "in": "query",
            "name": "user",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to responses submitted to this form.",
            "in": "query",
            "name": "form",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to responses relating to this contribution.",
            "in": "query",
            "name": "contribution",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/FormResponse"
                  },
                  "type": "array"
                }
              }
            },
            "description": "A list of form responses",
            "headers": {
              "X-total-count": {
                "description": "Total number of matching form responses",
                "schema": {
                  "type": "number"
                }
              }
            }
          }
        },
        "summary": "List form responses",
        "tags": [
          "form"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FormResponseSubmission"
              }
            }
          },
          "description": "Form response",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FormResponse"
                }
              }
            },
            "description": "Form response saved"
          }
        },
        "summary": "Submit a response to a form",
        "tags": [
          "form"
        ]
      }
    },
    "/form-responses/{id}": {
      "get": {
        "parameters": [
          {
            "description": "Id of the assignment to return",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FormResponse"
                }
              }
            },
            "description": "Form response found"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Get a single form response by id",
        "tags": [
          "form"
        ]
      }
    },
    "/forms": {
      "get": {
        "parameters": [
          {
            "description": "Restrict results to forms owned by this user.",
            "in": "query",
            "name": "ownedBy",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Form"
                  },
                  "type": "array"
                }
              }
            },
            "description": "A list of forms",
            "headers": {
              "X-total-count": {
                "description": "Total number of matching forms",
                "schema": {
                  "type": "number"
                }
              }
            }
          }
        },
        "summary": "List forms",
        "tags": [
          "form"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FormSubmission"
              }
            }
          },
          "description": "Form object to be created",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Form"
                }
              }
            },
            "description": "Form created"
          }
        },
        "summary": "Create a form",
        "tags": [
          "form"
        ]
      }
    },
    "/forms/{id}": {
      "delete": {
        "parameters": [
          {
            "description": "Id of the form to delete",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Form deleted"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Delete this form and all of it's responses.",
        "tags": [
          "form"
        ]
      },
      "get": {
        "parameters": [
          {
            "description": "Id of the form to return",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Form"
                }
              }
            },
            "description": "Form found"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Get a single form by id",
        "tags": [
          "form"
        ]
      }
    },
    "/media": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "format": "byte",
                "type": "string"
              }
            }
          },
          "description": "Binary media file",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Media"
                }
              }
            },
            "description": "Media created"
          }
        },
        "security": [
          {
            "oauth": [
              "full"
            ]
          }
        ],
        "summary": "Submit a new media file",
        "tags": [
          "media"
        ]
      }
    },
    "/notifications/contributions/{id}/preview": {
      "get": {
        "parameters": [
          {
            "description": "Id of the contribution to preview a notification for",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Type of message to preview.",
            "in": "query",
            "name": "message",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationPreview"
                }
              }
            },
            "description": "Notification preview"
          }
        },
        "tags": [
          "notifications"
        ]
      }
    },
    "/scopes": {
      "get": {
        "description": "List available token scopes",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              }
            },
            "description": "A list of scopes"
          }
        },
        "summary": "Scopes",
        "tags": [
          "auth"
        ]
      }
    },
    "/subscription-types": {
      "get": {
        "description": "List available subscription types",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/SubscriptionType"
                  },
                  "type": "array"
                }
              }
            },
            "description": "A list of subscription event types"
          }
        },
        "summary": "Subscription types",
        "tags": [
          "subscriptions"
        ]
      }
    },
    "/subscriptions": {
      "get": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubscriptionSubmission"
              }
            }
          },
          "description": "Subscription to be created",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Subscription"
                  },
                  "type": "array"
                }
              }
            },
            "description": "A list of notification subscriptions",
            "headers": {
              "X-total-count": {
                "description": "Total number of matching subscriptions",
                "schema": {
                  "type": "number"
                }
              }
            }
          }
        },
        "summary": "List subscriptions for the authorised user.",
        "tags": [
          "subscriptions"
        ]
      }
    },
    "/subscriptions/{id}": {
      "delete": {
        "parameters": [
          {
            "description": "Id of the subscription to delete",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The subscription has been successfully deleted."
          }
        },
        "summary": "Delete a subscription.",
        "tags": [
          "subscriptions"
        ]
      }
    },
    "/tags": {
      "get": {
        "description": "Retrieve tags.",
        "parameters": [
          {
            "description": "Restrict results to those owned by this user.",
            "in": "query",
            "name": "ownedBy",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to tags belonging to this tag set.",
            "in": "query",
            "name": "tagSet",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results by urlWords. Should be used with ownedBy when searching for one of your own tags.",
            "in": "query",
            "name": "urlWords",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Tag"
                  },
                  "type": "array"
                }
              }
            },
            "description": "A list of tags",
            "headers": {
              "X-total-count": {
                "description": "Total number of matching tags",
                "schema": {
                  "type": "number"
                }
              }
            }
          }
        },
        "summary": "List tags",
        "tags": [
          "tag"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagSubmission"
              }
            }
          },
          "description": "Tag object to be created",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tag"
                }
              }
            },
            "description": "Tag created"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "The new tag submission failed to validate. Check the response body for details."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Failed to create the new tag due to an unexcepted error."
          }
        },
        "summary": "Create a new tag",
        "tags": [
          "tag"
        ]
      }
    },
    "/tags/{id}": {
      "get": {
        "parameters": [
          {
            "description": "Id of the tag to return",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tag"
                }
              }
            },
            "description": "The tag"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Retrieve a single tag by id",
        "tags": [
          "tag"
        ]
      }
    },
    "/tagsets": {
      "get": {
        "description": "Retrieve tag sets.",
        "parameters": [
          {
            "description": "Restrict results to those owned by this user.",
            "in": "query",
            "name": "ownedBy",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results by urlWords. Should be used with ownedBy when searching for one of your own tag sets.",
            "in": "query",
            "name": "urlWords",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/TagSet"
                  },
                  "type": "array"
                }
              }
            },
            "description": "A list of tag sets",
            "headers": {
              "X-total-count": {
                "description": "Total number of matching tag sets",
                "schema": {
                  "type": "number"
                }
              }
            }
          }
        },
        "summary": "List tag sets",
        "tags": [
          "tag"
        ]
      },
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagSetSubmission"
              }
            }
          },
          "description": "Tag set to be created",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagSet"
                }
              }
            },
            "description": "Tagset created"
          }
        },
        "summary": "Create a new tag set",
        "tags": [
          "tag"
        ]
      }
    },
    "/tagsets/{id}": {
      "get": {
        "parameters": [
          {
            "description": "Id of the tag set to return",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagSet"
                }
              }
            },
            "description": "The tag set"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Retrieve a single tag set by id",
        "tags": [
          "tag"
        ]
      }
    },
    "/users": {
      "get": {
        "parameters": [
          {
            "description": "Restrict results to the users who have contributed to this assignment.",
            "in": "query",
            "name": "assignment",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to the users who have submitted a contribution with a public location located within this country.",
            "in": "query",
            "name": "country",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to the users who have submitted at least this many contributions.",
            "in": "query",
            "name": "minimumContributions",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "description": "Restrict results to the users who a linked profile of this type.",
            "in": "query",
            "name": "linkedProfile",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Restrict results to the users who are owned by of this owner.",
            "in": "query",
            "name": "ownedBy",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Limit results to users who have submitted at least one contribution before this date time.",
            "in": "query",
            "name": "submittedBefore",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "Limit results to users who have submitted at least one contribution after this date time.",
            "in": "query",
            "name": "submittedAfter",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "Restrict results to the user with this username.",
            "in": "query",
            "name": "username",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/User"
                  },
                  "type": "array"
                }
              }
            },
            "description": "A list of users",
            "headers": {
              "X-total-count": {
                "description": "Total number of matching users",
                "schema": {
                  "type": "number"
                }
              }
            }
          }
        },
        "summary": "List users",
        "tags": [
          "user"
        ]
      }
    },
    "/users/{id}": {
      "get": {
        "parameters": [
          {
            "description": "Id of the user to return",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            },
            "description": "Successful"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Retrieve a single user by id",
        "tags": [
          "user"
        ]
      }
    },
    "/users/{id}/linked/{type}": {
      "get": {
        "parameters": [
          {
            "description": "Id of the user to return",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Type of the linked profile to fetch",
            "in": "path",
            "name": "type",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LinkedProfile"
                }
              }
            },
            "description": "Successful"
          },
          "404": {
            "description": "Not found"
          }
        },
        "summary": "Retrieve a users linked profile by type",
        "tags": [
          "user"
        ]
      }
    },
    "/verify": {
      "post": {
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Authority"
                }
              }
            },
            "description": "Token is valid"
          }
        },
        "security": [
          {
            "oauth": [
              "full"
            ]
          }
        ],
        "summary": "Verify token and return details of the owning user",
        "tags": [
          "auth"
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "Artifact": {
        "properties": {
          "contentLength": {
            "type": "number"
          },
          "contentType": {
            "type": "string"
          },
          "height": {
            "type": "number"
          },
          "label": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "width": {
            "type": "number"
          }
        },
        "type": "object"
      },
      "ArtifactFormat": {
        "properties": {
          "contentType": {
            "type": "string"
          },
          "fileExtension": {
            "type": "string"
          },
          "forContentType": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "preserveAspectRatio": {
            "type": "boolean"
          },
          "public": {
            "type": "boolean"
          },
          "upscaleAllowed": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "ArtifactFormats": {
        "properties": {
          "contribution": {
            "items": {
              "$ref": "#/components/schemas/ArtifactFormat"
            },
            "type": "array"
          },
          "cover": {
            "items": {
              "$ref": "#/components/schemas/ArtifactFormat"
            },
            "type": "array"
          },
          "profileImage": {
            "items": {
              "$ref": "#/components/schemas/ArtifactFormat"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "Assignment": {
        "properties": {
          "allowsAnonymousContributions": {
            "type": "boolean"
          },
          "callToAction": {
            "description": "An optional call to action specific to this assignment. ie. Submit your snow pictures.",
            "type": "string"
          },
          "cover": {
            "$ref": "#/components/schemas/MediaUsage"
          },
          "created": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "embargo": {
            "format": "date-time",
            "type": "string"
          },
          "ends": {
            "format": "date-time",
            "type": "string"
          },
          "featured": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "mediaRequired": {
            "type": "boolean"
          },
          "moderator": {
            "description": "Optional credential id of the moderator who owns this particular assignment.",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "open": {
            "description": "Helper value. Is this assignment currently open? Based on the value of the ends field.",
            "type": "boolean"
          },
          "receiptMessage": {
            "description": "An optional assignment specific message to be displayed on successful contribution submission. For example, this might be used to inform contributors of assignment specific moderation time frames.",
            "type": "string"
          },
          "starts": {
            "format": "date-time",
            "type": "string"
          },
          "tags": {
            "items": {
              "$ref": "#/components/schemas/Tag"
            },
            "type": "array"
          },
          "urlWords": {
            "type": "string"
          },
          "webUrl": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "AssignmentSubmission": {
        "properties": {
          "allowsAnonymousContributions": {
            "type": "boolean"
          },
          "cover": {
            "$ref": "#/components/schemas/MediaUsage"
          },
          "description": {
            "type": "string"
          },
          "embargo": {
            "format": "date-time",
            "type": "string"
          },
          "ends": {
            "format": "date-time",
            "type": "string"
          },
          "featured": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "mediaRequired": {
            "type": "boolean"
          },
          "moderator": {
            "description": "Optional credential id of the login which will moderator this assignment.",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "receiptMessage": {
            "description": "An optional assignment specific message to be displayed on successful contribution submission. For example, this might be used to inform contributors of assignment specific moderation time frames.",
            "type": "string"
          },
          "starts": {
            "format": "date-time",
            "type": "string"
          },
          "tags": {
            "items": {
              "$ref": "#/components/schemas/Tag"
            },
            "type": "array"
          },
          "urlWords": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "Authority": {
        "properties": {
          "client": {
            "$ref": "#/components/schemas/Client"
          },
          "id": {
            "type": "string"
          },
          "user": {
            "$ref": "#/components/schemas/User"
          }
        },
        "type": "object"
      },
      "ChangeLogItem": {
        "properties": {
          "date": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "title",
          "date"
        ],
        "type": "object"
      },
      "Client": {
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "Contribution": {
        "properties": {
          "assignment": {
            "$ref": "#/components/schemas/Assignment"
          },
          "attribution": {
            "description": "The public attribution for this contribution. This will be the display name of the registered user or the contributor's first and last name if they provided them while making a non authenticated contribution. A blank attribution field indicates and anonymous contribution.",
            "type": "string"
          },
          "body": {
            "type": "string"
          },
          "created": {
            "format": "date-time",
            "type": "string"
          },
          "headline": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "mediaUsages": {
            "items": {
              "$ref": "#/components/schemas/MediaUsage"
            },
            "type": "array"
          },
          "moderationHistory": {
            "items": {
              "$ref": "#/components/schemas/ModerationHistoryItem"
            },
            "type": "array"
          },
          "place": {
            "$ref": "#/components/schemas/Place"
          },
          "urlWords": {
            "type": "string"
          },
          "via": {
            "$ref": "#/components/schemas/Via"
          }
        },
        "type": "object"
      },
      "Credential": {
        "properties": {
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "type": {
            "type": "string"
          },
          "user": {
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "ErrorField": {
        "properties": {
          "message": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "ErrorResponse": {
        "properties": {
          "fields": {
            "items": {
              "$ref": "#/components/schemas/ErrorField"
            },
            "type": "array"
          },
          "message": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "EventType": {
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "type": "object"
      },
      "Export": {
        "properties": {
          "downloadUrl": {
            "type": "string"
          },
          "finished": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "progress": {
            "type": "number"
          },
          "started": {
            "format": "date-time",
            "type": "string"
          },
          "step": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "owner",
          "started"
        ],
        "type": "object"
      },
      "ExportSummary": {
        "properties": {
          "contributions": {
            "description": "The number of contributions selected for export.",
            "type": "number"
          },
          "estimatedSize": {
            "description": "Human readable estimate of the export size. ie. '10MB'.",
            "type": "string"
          },
          "media": {
            "description": "The number of media files included in this export.",
            "type": "number"
          },
          "totalMediaSize": {
            "description": "The expected total size of the media files to be exported.",
            "type": "number"
          }
        },
        "required": [
          "contributions",
          "media",
          "totalMediaSize"
        ],
        "type": "object"
      },
      "Flag": {
        "properties": {
          "date": {
            "format": "date-time",
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "Form": {
        "properties": {
          "callToAction": {
            "type": "string"
          },
          "cssUrl": {
            "type": "string"
          },
          "fields": {
            "items": {
              "$ref": "#/components/schemas/FormField"
            },
            "type": "array"
          },
          "heading": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "noCss": {
            "type": "boolean"
          },
          "ownedBy": {
            "type": "string"
          },
          "tags": {
            "items": {
              "$ref": "#/components/schemas/Tag"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "FormField": {
        "properties": {
          "description": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "options": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "public": {
            "type": "boolean"
          },
          "required": {
            "type": "boolean"
          },
          "type": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "FormResponse": {
        "properties": {
          "contribution": {
            "type": "string"
          },
          "date": {
            "format": "date-time",
            "type": "string"
          },
          "form": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "responses": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "user": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "FormResponseSubmission": {
        "properties": {
          "contribution": {
            "type": "string"
          },
          "form": {
            "type": "string"
          },
          "responses": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "FormSubmission": {
        "properties": {
          "callToAction": {
            "type": "string"
          },
          "cssUrl": {
            "type": "string"
          },
          "fields": {
            "items": {
              "$ref": "#/components/schemas/FormField"
            },
            "type": "array"
          },
          "heading": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "noCss": {
            "type": "boolean"
          },
          "tags": {
            "items": {
              "$ref": "#/components/schemas/Tag"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "Group": {
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "LatLong": {
        "properties": {
          "latitude": {
            "format": "double",
            "type": "number"
          },
          "longitude": {
            "format": "double",
            "type": "number"
          }
        },
        "type": "object"
      },
      "LinkedProfile": {
        "properties": {
          "bio": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "picture": {
            "type": "string"
          },
          "profile": {
            "type": "string"
          },
          "registered": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "Media": {
        "properties": {
          "duration": {
            "type": "number"
          },
          "id": {
            "type": "string"
          },
          "place": {
            "$ref": "#/components/schemas/Place"
          },
          "type": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "MediaUsage": {
        "properties": {
          "artifacts": {
            "items": {
              "$ref": "#/components/schemas/Artifact"
            },
            "type": "array"
          },
          "id": {
            "type": "string"
          },
          "media": {
            "$ref": "#/components/schemas/Media"
          }
        },
        "type": "object"
      },
      "ModerationAction": {
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "resultingState": {
            "$ref": "#/components/schemas/ModerationState"
          }
        },
        "required": [
          "id",
          "label",
          "resultingState"
        ],
        "type": "object"
      },
      "ModerationHistoryItem": {
        "properties": {
          "action": {
            "$ref": "#/components/schemas/ModerationAction"
          },
          "date": {
            "format": "date-time",
            "type": "string"
          },
          "notes": {
            "type": "string"
          }
        },
        "required": [
          "date"
        ],
        "type": "object"
      },
      "ModerationHistoryItemSubmission": {
        "properties": {
          "action": {
            "$ref": "#/components/schemas/ModerationAction"
          },
          "notes": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "ModerationState": {
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "public": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "label",
          "public"
        ],
        "type": "object"
      },
      "NotificationPreview": {
        "properties": {
          "email": {
            "type": "string"
          },
          "html": {
            "type": "string"
          },
          "subject": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "OsmId": {
        "properties": {
          "osmId": {
            "type": "number"
          },
          "osmType": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "Place": {
        "properties": {
          "country": {
            "type": "string"
          },
          "geohash": {
            "type": "string"
          },
          "google": {
            "type": "string"
          },
          "latLong": {
            "$ref": "#/components/schemas/LatLong"
          },
          "name": {
            "type": "string"
          },
          "osm": {
            "$ref": "#/components/schemas/OsmId"
          }
        },
        "type": "object"
      },
      "Subscription": {
        "properties": {
          "assignment": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "includeBody": {
            "type": "boolean"
          },
          "includeThumbenail": {
            "type": "boolean"
          },
          "slackChannel": {
            "type": "string"
          },
          "token": {
            "type": "string"
          },
          "types": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "user": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "token",
          "user",
          "types",
          "includeBody",
          "includeThumbnail"
        ],
        "type": "object"
      },
      "SubscriptionSubmission": {
        "properties": {
          "assignment": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "includeBody": {
            "type": "boolean"
          },
          "includeThumbenail": {
            "type": "boolean"
          },
          "slackChannel": {
            "type": "string"
          },
          "types": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "types",
          "includeBody",
          "includeThumbnail"
        ],
        "type": "object"
      },
      "SubscriptionType": {
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "type": "object"
      },
      "Tag": {
        "properties": {
          "colour": {
            "description": "Optional HTML hexcode colour",
            "example": "#0061a6",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "tagSet": {
            "$ref": "#/components/schemas/TagSet"
          },
          "urlWords": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "type": "object"
      },
      "TagSet": {
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "type": "object"
      },
      "TagSetSubmission": {
        "properties": {
          "name": {
            "type": "string"
          },
          "urlWords": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "urlWords"
        ],
        "type": "object"
      },
      "TagSubmission": {
        "properties": {
          "colour": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "tagSet": {
            "$ref": "#/components/schemas/TagSet"
          },
          "urlWords": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "User": {
        "properties": {
          "bio": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "registered": {
            "format": "date-time",
            "type": "string"
          },
          "username": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "Via": {
        "properties": {
          "authority": {
            "$ref": "#/components/schemas/Authority"
          },
          "ipAddress": {
            "type": "string"
          },
          "ipAddressPlace": {
            "$ref": "#/components/schemas/Place"
          }
        },
        "type": "object"
      }
    },
    "securitySchemes": {
      "oauth": {
        "flows": {
          "password": {
            "scopes": {
              "full": "Full access"
            },
            "tokenUrl": "https://api.contriby.com/1/token"
          }
        },
        "type": "oauth2"
      }
    }
  }
}