API reference

Support API

Support

HTTP reference. Generated from the backend contract. Browse endpoints below or download OpenAPI.

This group has 9 operations, generated from api/openapi.yaml. Filter by path, action, or authentication. Each endpoint lists its inputs; expand it for a request template and response codes. Templates need your own values and a schema-valid body.

Replace uppercase placeholders with your values. For a JSON request, save a body matching the schema in request.json. Cookie examples use a local cookie jar from an authenticated session.

Support

POST/website/support-messages

Send a website contact message

Anonymous same-origin JSON intake for the website contact form. Requires the website Origin and an Idempotency-Key of 20-128 letters, digits, hyphens or underscores. Creates no account or session. Saves the message and reply email before acknowledging it; the support worker delivers them to the configured support Slack channel.

The visitor-supplied email is contact information, never identity proof. Exact retries return the same acknowledgement without another delivery; a changed body with the same key is idempotency_mismatch.

At most 10 new messages per client IP per hour (IPv6 grouped by /64), 3 per email per day and 200 globally per hour; all requests share a 120-per-IP-per-minute limit. Retry-After is authoritative. Messages remain queued during delivery failures; delivered records expire after 30 days.

Authentication
none
Request body
object
Operation ID
submitWebsiteSupportMessage

Parameters

NameSend inRequired?Description
Originheaderrequired
Idempotency-Keyheaderrequired

Request body fields

FieldDescription
email (required, string)maxLength: 254 format: "email"
message (required, string)Literal message, preserving paragraphs and indentation; whitespace-only text is refused. minLength: 1 maxLength: 4000
website (optional, string)Anti-spam field; leave empty. maxLength: 200
Request template and responses
shell · request template
curl --request POST --header 'Origin: https://screenrig.ai' --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/website/support-messages'

Responses

StatusMeaningBody and headers
202Message saved for delivery, or an exact retry acknowledged. Contains no contact data.object (application/json); headers: Cache-Control
default

Stable RFC 9457 problem response. A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

Problem (application/problem+json)
GET/api/support/status

Support Status

Availability and hours for any active project. chat_allowed is true for every active project, including Standard. human_available is true when a person can join the chat on request (Education, Premium and Enterprise); Standard and Plus get documentation and AI support. staffed says whether staff are in their hours now. Luna answers right away on every plan.

Authentication
projectBearer OR dashboardSession
Request body
none
Operation ID
supportStatus

Parameters

NameSend inRequired?Description
ScreenRig-ProjectheaderoptionalDeprecated for one release. Must be consistent with the JWT projects grants; adds Deprecation and Warning headers. No token exchange.
Request template and responses
shell · request template
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/support/status'

Responses

StatusMeaningBody and headers
200Support result.SupportStatus (application/json)
default

Stable RFC 9457 problem response. A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

Problem (application/problem+json)
GET/api/support/conversations

List Support Conversations

Project conversations, newest first, at most 100. Staff unread counts are per authenticated person or agent.

Authentication
projectBearer OR dashboardSession
Request body
none
Operation ID
listSupportConversations

Parameters

NameSend inRequired?Description
ScreenRig-ProjectheaderoptionalDeprecated for one release. Must be consistent with the JWT projects grants; adds Deprecation and Warning headers. No token exchange.
beforequeryoptionalConversation ID from the preceding page's next cursor.
Request template and responses
shell · request template
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/support/conversations'

Responses

StatusMeaningBody and headers
200Support result.SupportConversationList (application/json)
default

Stable RFC 9457 problem response. A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

Problem (application/problem+json)
POST/api/support/conversations

Create Support Conversation

Available on every plan; Luna answers first, right away. Where a person can join (human_available on the support status) a request for one pauses Luna for staff; on Standard and Plus it is ignored and Luna answers. Screened before storage or Slack.

An opening message under 8 characters or 3 words returns submission_too_short; one that is not a question or problem returns submission_unclear; spam, link-heavy text, prompt injection and unsafe text return submission_rejected. Rejected text is not retained or sent to Luna, and the problem detail never repeats it.

Credential-shaped text other than ScreenRig credentials (bearer tokens, cloud and API keys, private keys) is replaced with [redacted] before storage; ScreenRig credential material returns invalid_request. A new conversation starts one Slack thread; follow-ups stay in it. Requests with the same key replay for 24 hours, a refusal included.

Authentication
projectBearer OR dashboardSession
Request body
SupportWrite
Operation ID
createSupportConversation

Parameters

NameSend inRequired?Description
ScreenRig-ProjectheaderoptionalDeprecated for one release. Must be consistent with the JWT projects grants; adds Deprecation and Warning headers. No token exchange.
Idempotency-Keyheaderrequired

Request body fields

FieldDescription
body (required, string)minLength: 1 maxLength: 4000
human_requested (optional, boolean)

Ask for a person, which pauses Luna and waits for staff. It counts only where a person can join (human_available: Education, Premium and Enterprise); on Standard and Plus it is ignored and Luna answers. default: false

Request template and responses
shell · request template
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/support/conversations'

Responses

StatusMeaningBody and headers
201Support result.SupportSubmission (application/json)
422The message was refused by screening: submission_too_short or submission_unclear (the opening message only) or submission_rejected. The detail never repeats the text.Problem (application/problem+json)
default

Stable RFC 9457 problem response. A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

Problem (application/problem+json)
GET/api/support/conversations/{id}/messages

List Support Messages

Messages in project conversation, ascending sequence, at most 100. Continue after the last message sequence for older conversation pagination. Reading does not acknowledge staff unread state.

Authentication
projectBearer OR dashboardSession
Request body
none
Operation ID
listSupportMessages

Parameters

NameSend inRequired?Description
ScreenRig-ProjectheaderoptionalDeprecated for one release. Must be consistent with the JWT projects grants; adds Deprecation and Warning headers. No token exchange.
idpathrequired
afterqueryoptionalProject support message sequence; resumes strictly after this position.
Request template and responses
shell · request template
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/support/conversations/RESOURCE_ID/messages'

Responses

StatusMeaningBody and headers
200Support result.SupportMessageList (application/json)
default

Stable RFC 9457 problem response. A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

Problem (application/problem+json)
POST/api/support/conversations/{id}/messages

Reply Support Conversation

Adds a customer message to an open conversation. A follow-up has no minimum length and is never refused as unclear on its own ("thanks", "yes"); it is screened for safety, prompt injection and link spam, refused with submission_rejected, and credential-shaped text is handled as for a new conversation.

Rejected text is not retained, and a refusal replays under the same key for 24 hours.

Authentication
projectBearer OR dashboardSession
Request body
SupportWrite
Operation ID
replySupportConversation

Parameters

NameSend inRequired?Description
ScreenRig-ProjectheaderoptionalDeprecated for one release. Must be consistent with the JWT projects grants; adds Deprecation and Warning headers. No token exchange.
idpathrequired
Idempotency-Keyheaderrequired

Request body fields

FieldDescription
body (required, string)minLength: 1 maxLength: 4000
human_requested (optional, boolean)

Ask for a person, which pauses Luna and waits for staff. It counts only where a person can join (human_available: Education, Premium and Enterprise); on Standard and Plus it is ignored and Luna answers. default: false

Request template and responses
shell · request template
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/support/conversations/RESOURCE_ID/messages'

Responses

StatusMeaningBody and headers
201Support result.SupportSubmission (application/json)
422The message was refused by screening: submission_too_short or submission_unclear (the opening message only) or submission_rejected. The detail never repeats the text.Problem (application/problem+json)
default

Stable RFC 9457 problem response. A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

Problem (application/problem+json)
PUT/api/support/conversations/{id}/read

Read Support Conversation

Monotonically acknowledge messages through sequence for this reader. Cannot acknowledge beyond the conversation last_sequence.

Authentication
projectBearer OR dashboardSession
Request body
SupportRead
Operation ID
readSupportConversation

Parameters

NameSend inRequired?Description
ScreenRig-ProjectheaderoptionalDeprecated for one release. Must be consistent with the JWT projects grants; adds Deprecation and Warning headers. No token exchange.
idpathrequired

Request body fields

FieldDescription
sequence (required, integer)minimum: 0
Request template and responses
shell · request template
curl --request PUT --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/support/conversations/RESOURCE_ID/read'

Responses

StatusMeaningBody and headers
200Support result.SupportRead (application/json)
default

Stable RFC 9457 problem response. A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

Problem (application/problem+json)
POST/api/support/conversations/{id}/close

Close Support Conversation

End this project conversation and cancel pending AI replies. Repeatable; preserves history. Staff can reopen it in Slack.

Authentication
projectBearer OR dashboardSession
Request body
none
Operation ID
closeSupportConversation

Parameters

NameSend inRequired?Description
ScreenRig-ProjectheaderoptionalDeprecated for one release. Must be consistent with the JWT projects grants; adds Deprecation and Warning headers. No token exchange.
idpathrequired
Request template and responses
shell · request template
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/support/conversations/RESOURCE_ID/close'

Responses

StatusMeaningBody and headers
200Closed conversation.SupportConversation (application/json)
default

Stable RFC 9457 problem response. A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

Problem (application/problem+json)
GET/stream/support

Stream Support Messages

Project support messages on every plan as resumable SSE. event is support.message; id is the project support sequence, data is SupportMessage. after takes precedence over Last-Event-ID. Cursor 0 replays history. Staff, customer and AI messages are distinguished by role. Streams revalidate credentials and active project access.

No screenshot or credential data is sent.

Authentication
projectBearer OR dashboardSession
Request body
none
Operation ID
streamSupportMessages

Parameters

NameSend inRequired?Description
ScreenRig-ProjectheaderoptionalDeprecated for one release. Must be consistent with the JWT projects grants; adds Deprecation and Warning headers. No token exchange.
afterqueryoptionalProject support message sequence; resumes strictly after this position.
Last-Event-IDheaderoptional
Request template and responses
shell · request template
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/stream/support'

Responses

StatusMeaningBody and headers
200Support message SSE.string (text/event-stream)
default

Stable RFC 9457 problem response. A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

Problem (application/problem+json)