# Submission

class `praw.models.``Submission`(reddit, id=None, url=None, _data=None)

  A class for submissions to reddit.

  `__init__`(reddit, id=None, url=None, _data=None)

    Initialize a Submission instance.

    Parameters:

    - reddit – An instance of `Reddit`.
    - id – A reddit base36 submission ID, e.g., `2gmzqe`.
    - url – A URL supported by `id_from_url()`.

    Either `id` or `url` can be provided, but not both.

  `clear_vote`()

    Clear the authenticated user’s vote on the object.

    Note

    Votes must be cast by humans. That is, API clients proxying a human’s action one-for-one are OK, but bots deciding how to vote on content or amplifying a human’s vote are not. See the reddit rules for more details on what constitutes vote cheating. [Ref]

  `comments`

    Provide an instance of `CommentForest`.

    This attribute can use used, for example, to obtain a flat list of comments, with any `MoreComments` removed:

        submission.comments.replace_more(limit=0)
        comments = submission.comments.list()

    Sort order and comment limit can be set with the `comment_sort` and `comment_limit` attributes before comments are fetched, including any call to `replace_more()`:

        submission.comment_sort = 'new'
        comments = submission.comments.list()

    See Extracting comments with PRAW for more on working with a `CommentForest`.

  `crosspost`(subreddit, title=None, send_replies=True)

    Crosspost the submission to a subreddit.

    Parameters:

    - subreddit – Name of the subreddit or `Subreddit` object to crosspost into.
    - title – Title of the submission. Will use this submission’s title if None (default: None).
    - send_replies – When True, messages will be sent to the submission author when comments are made to the submission (default: True).

    Returns: | A `Submission` object for the newly created submission.

  `delete`()

    Delete the object.

  `disable_inbox_replies`()

    Disable inbox replies for the item.

  `downvote`()

    Downvote the object.

    Note

    Votes must be cast by humans. That is, API clients proxying a human’s action one-for-one are OK, but bots deciding how to vote on content or amplifying a human’s vote are not. See the reddit rules for more details on what constitutes vote cheating. [Ref]

  `duplicates`(**generator_kwargs)

    Return a ListingGenerator for the submission’s duplicates.

    Additional keyword arguments are passed in the initialization of `ListingGenerator`.

  `edit`(body)

    Replace the body of the object with `body`.

    Parameters: | body – The markdown formatted content for the updated object.
    Returns: | The current instance after updating its attributes.

  `enable_inbox_replies`()

    Enable inbox replies for the item.

  `flair`

    Provide an instance of `SubmissionFlair`.

    This attribute is used to work with flair as a regular user of the subreddit the submission belongs to. Moderators can directly use `flair()`.

    For example, to select an arbitrary editable flair text (assuming there is one) and set a custom value try:

        choices = submission.flair.choices()
        template_id = next(x for x in choices
                           if x['flair_text_editable'])['flair_template_id']
        submission.flair.select(template_id, 'my custom value')

  `fullname`

    Return the object’s fullname.

    A fullname is an object’s kind mapping like `t3` followed by an underscore and the object’s base36 ID, e.g., `t1_c5s96e0`.

  `gild`()

    Gild the author of the item.

  `hide`(other_submissions=None)

    Hide Submission.

    Parameters: | other_submissions – When provided, additionally hide this list of `Submission` instances as part of a single request (default: None).

  static `id_from_url`(url)

    Return the ID contained within a submission URL.

    Parameters: | url – A url to a submission in one of the following formats (http urls will also work): * https://redd.it/2gmzqe * https://reddit.com/comments/2gmzqe/ * https://www.reddit.com/r/redditdev/comments/2gmzqe/praw_https/

    Raise `ClientException` if URL is not a valid submission URL.

  `mod`

    Provide an instance of `SubmissionModeration`.

  `parse`(data, reddit)

    Return an instance of `cls` from `data`.

    Parameters:

    - data – The structured data.
    - reddit – An instance of `Reddit`.

  `reply`(body)

    Reply to the object.

    Parameters: | body – The markdown formatted content for a comment.
    Returns: | A `Comment` object for the newly created comment.

  `report`(reason)

    Report this object to the moderators of its subreddit.

    Parameters: | reason – The reason for reporting.

  `save`(category=None)

    Save the object.

    Parameters: | category – (Gold) The category to save to. If your user does not have gold this value is ignored by Reddit (default: None).

  `shortlink`

    Return a shortlink to the submission.

    For example http://redd.it/eorhm is a shortlink for https://www.reddit.com/r/announcements/comments/eorhm/reddit_30_less_typing/.

  `unhide`(other_submissions=None)

    Unhide Submission.

    Parameters: | other_submissions – When provided, additionally unhide this list of `Submission` instances as part of a single request (default: None).

  `unsave`()

    Unsave the object.

  `upvote`()

    Upvote the object.

    Note

    Votes must be cast by humans. That is, API clients proxying a human’s action one-for-one are OK, but bots deciding how to vote on content or amplifying a human’s vote are not. See the reddit rules for more details on what constitutes vote cheating. [Ref]