Skip to content

Right Now, WIP ​

NOTE

This page is a work in progress. Endpoints below haven't been fully researched.

Get active right now post, WIP ​

Get the current Right Now post, including a hidden post before expiration. Returns {"post":null} when there is no current post or it has expired.

GET /v3/rightnow/active-post

Response:

Get other user right now post, WIP ​

Get a profile’s Right Now post. Uses activeText for live text and a flat media array rather than the feed’s type/data wrappers. Returns {"post":null} when the profile has no post, including for a nonexistent profile ID. Behavior for hidden or expired posts is undocumented.

GET /v3/rightnow/profiles/{profileId}

Response:

Update Right Now post, WIP ​

Partially edit an existing Right Now post. Send only the fields being changed. Edits preserve the post identity and expiration.

PATCH /{version}/rightnow/posts/{postId}

Body:

  • hosting — boolean
  • text — string, Submitted for moderation; read moderatedText before assuming activeText has changed.
  • media — Replaces the attached media array.
    • type — string, Media kind, e.g. image_v1.
    • data — object
      • id — The integer mediaId returned by POST /v1/media/upload or /v2/media/upload. The request uses data.id; own-post readback uses mediaId.
  • hidden — boolean, Whether the post is hidden.
  • shareLocation — RightNowShareLocation
  • locationRadius — integer, Location precision value. On this edit route, locationRadius = 100 − slider value. This is not a distance in meters.
  • isDiscreet — unknown, Discreet-post setting. The request value type is undocumented.
  • sharedFields — array of strings

Errors:

  • 400 — urn:gr:err:resource_not_found when no post has this ID.

Create right now post v4, WIP ​

Body type: CreatePostRequest (undocumented).

Response type: RightNowCreatePostResponse (undocumented).

POST /v4/rightnow/posts

Create right now post v3, WIP ​

Body type: CreatePostRequest (undocumented).

Response type: RightNowCreatePostResponse (undocumented).

POST /v3/rightnow/posts

Update Right Now post settings, WIP ​

Update hosting, location sharing, or visibility. Send hidden: true to deactivate the post and hidden: false to reactivate it before expiration; this preserves its identity and expiration.

PATCH /v1/rightnow/posts/{postId}/settings

Body:

  • shareLocation — RightNowShareLocation
  • hosting — boolean
  • hidden — boolean, true hides the post; false makes it active again.

Errors:

  • 400 — urn:gr:err:client_action when the body has no recognized settings key (hosting, shareLocation or hidden), checked before the post ID. urn:gr:err:resource_not_found when no post has this ID.

Get Right Now feed (v5) ​

Requires Authorization.

Get the Right Now feed (v5), with the same response shape and query parameters as v4. DISTANCE orders posts by ascending distance; NEWEST orders posts by descending posted time. Multiple sexualPositions select their union; position and hosting filters combine as an intersection. An active own post can remain included despite age and position filters. Card representation may change with filters, so filtered standard-post sets need not be subsets of unfiltered standard-post sets.

GET /v5/rightnow/feed

Query (optional):

  • sort — string, sort order, optional
  • hosting — boolean, true selects hosting posts; false selects non-hosting posts. Omit to include both., optional
  • sexualPositions — array of integers concatenated with a ,, -1 means "Not Specified", see Sexual position, optional
  • ageMin — integer, optional
  • ageMax — integer, optional

Response:

Upload Right Now media, WIP ​

Upload raw image bytes as application/octet-stream. Attach the returned mediaId using an image_v1/data.id post edit.

POST /v1/media/upload

Query (optional):

  • img_1_bottom — integer, optional
  • img_1_left — integer, optional
  • img_1_right — integer, optional
  • img_1_top — integer, optional

Body:

Binary file.

Response:

  • mediaId — long integer
  • url — URL
  • thumbnailUrl — URL

Get right now google play sku, WIP ​

Response type: RightNowSkuResponse (undocumented).

GET /v1/rightnow/googleplay/sku

Create right now request, WIP ​

Body type: RightNowCreateRequestData (undocumented).

POST /v1/rightnow/requests

Upload Right Now media (v2), WIP ​

Upload raw, uncropped image bytes as application/octet-stream with a separate crop rectangle (crop_*), a thumbnail crop (img_1_*), plus rotate and flip_vertical. Attach the returned mediaId using an image_v1/data.id post edit.

POST /v2/media/upload

Query:

  • crop_top — integer
  • crop_bottom — integer
  • crop_left — integer
  • crop_right — integer
  • img_1_top — integer
  • img_1_bottom — integer
  • img_1_left — integer
  • img_1_right — integer
  • rotate — integer, 0, 90, 180 or 270
  • flip_vertical — boolean

Body:

Binary file.

Response:

  • mediaId — long integer
  • url — URL
  • thumbnailUrl — URL

Get received Right Now requests, WIP ​

Requires Authorization.

GET /v1/rightnow/requests/inbox

Response:

  • requests — array, Item structure is undocumented.

Get sent Right Now requests, WIP ​

Requires Authorization.

GET /v1/rightnow/requests/outbox

Response:

  • requests — array, Item structure is undocumented.

Update Right Now request, WIP ​

Requires Authorization.

Body type: UpdateRightNowRequestData (undocumented).

PUT /v1/rightnow/requests/{requestId}

Get Right Now feed ​

Requires Authorization.

Get the Right Now feed. DISTANCE orders posts by ascending distance; NEWEST orders posts by descending posted time. Multiple sexualPositions select their union; position and hosting filters combine as an intersection. An active own post can remain included despite age and position filters. Card representation may change with filters, so filtered standard-post sets need not be subsets of unfiltered standard-post sets.

GET /v4/rightnow/feed

Query (optional):

  • sort — string, sort order, optional
  • hosting — boolean, true selects hosting posts; false selects non-hosting posts. Omit to include both., optional
  • sexualPositions — array of integers concatenated with a ,, -1 means "Not Specified", see Sexual position, optional
  • ageMin — integer, optional
  • ageMax — integer, optional

Response:

Get Right Now feed (v6) ​

Requires Authorization.

Get the Right Now feed (v6), with the same response shape and query parameters as v4. DISTANCE orders posts by ascending distance; NEWEST orders posts by descending posted time. Multiple sexualPositions select their union; position and hosting filters combine as an intersection. An active own post can remain included despite age and position filters. Card representation may change with filters, so filtered standard-post sets need not be subsets of unfiltered standard-post sets.

GET /v6/rightnow/feed

Query (optional):

  • sort — string, sort order, optional
  • hosting — boolean, true selects hosting posts; false selects non-hosting posts. Omit to include both., optional
  • sexualPositions — array of integers concatenated with a ,, -1 means "Not Specified", see Sexual position, optional
  • ageMin — integer, optional
  • ageMax — integer, optional

Response:

Get hookup intent post ​

Requires Authorization.

Returns your hookup intent post. Answers 204 with an empty body when you have none.

GET /v1/hookup-intent/post

Response:

Create hookup intent post ​

Requires Authorization.

Turns hookup intent on by creating your post.

POST /v1/hookup-intent/post

Body:

  • text — string, optional
  • shareLocation — RightNowShareLocation
  • locationRadius — integer, optional
  • media — array of objects, may be empty
  • hosting — boolean

Response:

Errors:

  • 409 — Conflicts with the current post state.

Update hookup intent post ​

Requires Authorization.

Only the fields present in the request body are updated.

PUT /v1/hookup-intent/post/{postId}

Body:

  • text — string
  • hosting — boolean
  • media — array of objects, optional; an empty array appears to remove the photo
  • shareLocation — RightNowShareLocation
  • locationRadius — integer

Response:

Delete hookup intent post ​

Requires Authorization.

Turns hookup intent off.

DELETE /v1/hookup-intent/post/{postId}

Renew hookup intent post ​

Requires Authorization.

Renews your hookup intent post, see status and renewsIn in Get hookup intent post.

POST /v1/hookup-intent/post/{postId}/renew

Response:

Errors:

  • 404 — No such post.
  • 409 — Conflicts with the current post state.

HookupIntentPost ​

Your hookup intent post.

  • id — long integer
  • profileId — long integer
  • posted — unix timestamp in milliseconds or null, optional
  • expiration — unix timestamp in milliseconds or null, optional
  • hosting — boolean, optional
  • activeText — string or null, the post's live text; moderatedText holds the latest submitted text, optional
  • moderatedText — object, the latest submitted text and its moderation state, or null, optional
    • id — long integer
    • postId — long integer
    • text — string
    • textStatus — string or null, known values: "AWAITING_MODERATION", "MODERATION_FAILED", "ERROR"
    • rejectReasons — array of strings or null
    • createdAt — long integer
    • updatedAt — long integer
  • media — array of objects or null, optional
    • mediaId — long integer
    • thumbnailUrl — URL
    • fullImageUrl — URL
    • contentType — string, e.g. image/jpeg
    • state — string, "PENDING", "APPROVED", "REJECTED", "DELETED" or null
    • reason — string or null
    • isRejectAutomated — boolean or null
    • shouldBlur — boolean, may be absent
    • isNsfw — boolean, may be absent
  • lat — number or null, optional
  • lon — number or null, optional
  • postStatus — string, "ACTIVE", "INACTIVE" or null, optional
  • shareLocation — RightNowShareLocation or null, optional
  • locationRadius — integer or null, optional
  • isDiscreet — string, "TRUE", "FALSE" or null, optional
  • sharedFields — array of strings or null, optional

RightNowStatus ​

  • "NOT_ACTIVE"
  • "HOSTING"
  • "NOT_HOSTING"

RightNowAttributionStatus ​

Right Now attribution status. Sent as a plain string under key rightNowStatus; unrecognized/absent values are treated as NONE by the official client.

  • "ACTIVE"
  • "HIDDEN"
  • "ACTIVE_WITH_BOOST"
  • "NONE"

RightNowShareLocation ​

  • "DISTANCE_AND_MAP"
  • "DISTANCE_ONLY"
  • "NONE"

RightNowFeedResponse ​

  • items — array of RightNowFeedResponseItem, optional
  • viewerCount — number of profiles currently viewing the feed area, optional

RightNowFeedResponseItem ​

A feed item, discriminated by type. Unrecognized type values are tolerated by the client (mapped to an unknown/ignored item), so new post kinds may appear.

  • type — string, optional
  • data — object, optional

CuratedPost ​

RightNowPost ​

  • type — string, optional
  • data — PostData, optional

LockedPost ​

  • type — string, optional
  • data — PostData, optional

PostData ​

  • @type — string, server post-data label, e.g. RightNowFeedItemData$RightNowPostV3 or $LockedPostV1, optional
  • id — long integer, optional
  • profileId — long integer, optional
  • mediaHash — string, optional
  • displayName — string, optional
  • media — array of RightNowPostMediaItem, optional
  • onlineUntil — unix timestamp in milliseconds; present on right_now_post_v3, absent on locked_post_v1; may be absent, optional
  • text — string, optional
  • distance — integer, distance in meters; may be absent, optional
  • mpuScore — float, optional
  • type — string, locked-post kind; present only on locked_post_v1; may be absent, optional
  • hosting — boolean, optional
  • posted — unix timestamp in milliseconds, optional
  • expiration — unix timestamp in milliseconds, optional
  • recentlyChatted — boolean, optional
  • favorite — boolean, optional
  • lat — number, Latitude; may be absent., optional
  • lon — Longitude; may be absent., optional
  • isOnPrep — boolean, Whether the profile is on PrEP., optional

RightNowPostMediaItem ​

  • type — string, optional
  • data — object, optional
    • mediaId — long integer
    • thumbnailUrl — URL
    • fullImageUrl — URL
    • contentType — string, e.g. image/jpeg
    • state — string, moderation state, e.g. APPROVED
    • reason — string, moderation reason or null
    • isRejectAutomated — boolean or null
    • shouldBlur — boolean
    • isNsfw — boolean
    • source — string, e.g. RIGHT_NOW

CuratedPostData ​

  • @type — string, e.g. RightNowFeedItemData$CuratedPostV1, optional
  • type — string, optional

UpsellInsertData ​

  • @type — string, e.g. RightNowFeedItemData$UpsellInsertV1, optional
  • type — string, optional

DiscreetPostData ​

Discreet posts were not present in available captures; shape derived from the app model (RightNowDiscreetPostResponse).

  • @type — string, server post-data label, optional
  • id — long integer, optional
  • media — array of RightNowPostMediaItem, optional
  • onlineUntil — unix timestamp in milliseconds; may be absent, optional
  • text — string, optional
  • distance — integer, distance in meters; may be absent, optional
  • hosting — boolean, optional
  • posted — unix timestamp in milliseconds, optional
  • expiration — unix timestamp in milliseconds, optional
  • profileFields — object, discreet profile fields; may be absent, optional

DiscreetPost ​

DiscreetLockedPost ​

UpsellInsert ​

RightNowMediaUploadResponse ​

Response from either Right Now media upload version. Attach mediaId using the image_v1/data.id edit payload.

  • mediaId — long integer, optional
  • url — URL, optional
  • thumbnailUrl — URL, optional

RightNowPostDetails ​

Right Now post returned by the own-post and profile-post endpoints. Text edits may leave activeText unchanged while moderatedText holds the submitted text and moderation state.

  • id — long integer, optional
  • profileId — long integer, optional
  • posted — unix timestamp in milliseconds or null, optional
  • expiration — unix timestamp in milliseconds or null, optional
  • hosting — boolean, optional
  • activeText — string or null, the post's live text; moderatedText holds the latest submitted text, optional
  • moderatedText — object, the latest submitted text and its moderation state, or null, optional
    • id — long integer
    • postId — long integer
    • text — string
    • textStatus — string or null, known values: "AWAITING_MODERATION", "MODERATION_FAILED", "ERROR"
    • rejectReasons — array of strings or null
    • createdAt — long integer
    • updatedAt — long integer
    • deleted — boolean
  • media — array of objects or null, optional
    • mediaId — long integer
    • thumbnailUrl — URL
    • fullImageUrl — URL
    • contentType — string, e.g. image/jpeg
    • state — string, moderation state, e.g. APPROVED
    • reason — string, moderation reason or null
    • isRejectAutomated — boolean, Whether a rejection is automated; true alone does not indicate rejection. or null
    • shouldBlur — boolean
    • isNsfw — boolean
    • source — string, e.g. RIGHT_NOW
  • lat — number or null, optional
  • lon — number or null, optional
  • postStatus — string, Post visibility status, including ACTIVE and HIDDEN. Hiding a post retains its data., optional
  • shareLocation — RightNowShareLocation or null, optional
  • locationRadius — integer, Location precision value from 0 to 100, or null. Not a distance in meters; null does not mean zero., optional
  • isDiscreet — string, "TRUE", "FALSE" or null, optional
  • sharedFields — array of strings or null, optional
  • boostUpsellOfferAvailableUntil — unix timestamp in milliseconds or null, optional

RightNowPostResponse ​

Open Grind is not affiliated with Grindr in any way.