Skip to content

feat: RD-158084 add Researcher API reference as a separate docs product - #14

Open
synack-tle wants to merge 3 commits into
synack:mainfrom
synack-tle:feature/RD-158084-researcher-api-reference
Open

synack-tle wants to merge 3 commits into
synack:mainfrom
synack-tle:feature/RD-158084-researcher-api-reference

Conversation

@synack-tle

@synack-tle synack-tle commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Jira Tickets

  • RD-158084 — Add public API for SRTs to submit vulnerabilities
  • RD-158072 — Update mintlify configuration
Screenshot 2026-08-31 at 5 56 44 PM Screenshot 2026-08-31 at 5 56 50 PM

synack-tle and others added 3 commits August 31, 2026 17:59
Adds the 500 response, the archived-category and too-many-attachments problem
types, the in-progress idempotency case, and the validationSteps limit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Mintlify page URLs come from the file path, not the navigation tree; for
OpenAPI-generated pages the object form of `openapi` sets that path via
`directory`. So a distinct /platform URL space for SRTs needs no second
Mintlify project and no reverse proxy.

- navigation.tabs -> navigation.products, one product per audience. Mintlify
  scopes tabs to a single audience and products to separate offerings with
  their own full navigation, which is what two audiences need. It also gives
  RD-156367 somewhere to put SRT guides that customers will not see.
- researcher spec moves to the object form with directory "platform", so its
  endpoints render under /platform/... instead of sharing /api-reference/...
  with the client specs. This also retires a latent slug collision: monolith-v1
  has GET /v1/vulnerabilities and the researcher spec has POST on the same
  path, and they only avoid colliding today because the methods differ.
- sync researcher-v1-openapi.yaml from synack_synack docs/platform/v1/openapi.yaml
  @ 5b56952639, which is the source of truth. This adds the srt_public_api scope
  requirement and the attachment size limits, and drops the Idempotency-Key
  header and 409 response, which are documented here but not implemented in
  synack_synack.
- keep only the two production servers, matching the other specs in this repo.
  The backend copy also lists dev, QA and staging hosts, which should not be
  published or offered in "Try it".

Verified with mint 4.2.588: both products render, the two researcher endpoints
resolve under /platform, all 91 client /api-reference URLs are byte-identical
to main, and mint broken-links reports the same 3 pre-existing failures as main
(all in unpublished essentials/ starter-kit files).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@synack-tle
synack-tle force-pushed the feature/RD-158084-researcher-api-reference branch from b5f20dd to 9fa3f0f Compare September 1, 2026 00:59
@synack-tle
synack-tle marked this pull request as ready for review September 1, 2026 01:01

It currently exposes vulnerability submission and the attachment upload that
supports it. Every operation is scoped to the researcher who owns the bearer
token; nothing in a request body can change that attribution.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is that "... nothing..." statement necessary? Is saying that "every operation is scoped to the researcher" is not sufficient?


Send a bearer token in the `Authorization` header. The token must be issued for this
API, carrying the `srt_public_api` scope; a session token is rejected with `403`, and
a token issued for this API cannot be used against the session API.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does this mention a session token? Is that relevant?

- url: https://platform.synack.us/api
description: FedRAMP (Medium)
security:
- bearerAuth: []

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indentation is off here.


## Errors

Errors follow RFC 7807 and are returned as `application/problem+json`. Validation

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we link to the actual RFC doc here for convenience? https://datatracker.ietf.org/doc/html/rfc7807


Errors follow RFC 7807 and are returned as `application/problem+json`. Validation
failures are `422 Unprocessable Content` and carry an `invalidParams` array naming
each offending field with the public (camelCase) name used in the request.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"public (camelCase) name used in the request" seems a bit excessive, right? "naming each ... field" does seem to imply exactly that, since exposing internal names would be weird in an API response.

type: object
description: |
Reserved for response metadata such as pagination. Always an empty object for these
operations.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it is not used, why expose it?

type: string
format: uri
description: Signed download URL, valid for two hours.
example: https://storage.googleapis.com/synack-attachments/8412773/login-bypass.png?X-Goog-Expires=7200

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it valid for two hours because of the X-Goog-Expires=7200 parameter? Is that relevant for this request?

resolvedAt:
type: string
format: date-time
description: RFC 3339 resolution timestamp. Absent until the vulnerability is resolved.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we add that the the timestamp must carry a timezone identifier or UTC offset?

format: int64
description: Identifier of the vulnerability.
example: 918273
listingId:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we not use the term assessment now?

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants