Skip to content

feat(DI-2719): add Signal IQ product documentation - #446

Open
siddu1819 wants to merge 62 commits into
mainfrom
feat/DI-2719
Open

feat(DI-2719): add Signal IQ product documentation#446
siddu1819 wants to merge 62 commits into
mainfrom
feat/DI-2719

Conversation

@siddu1819

Copy link
Copy Markdown
Collaborator

Introduce client-facing docs for Signal IQ across AA, PDF, and bring-your-own FI data flows, and register the product in endpoints.

Introduce client-facing docs for Signal IQ across AA, PDF, and bring-your-own FI data flows, and register the product in endpoints.

Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions

Copy link
Copy Markdown

Checklist to merge a PR 🚀

To merge this pull request, please take time to complete the checklist.

What action did you perform?

Review the corresponding checklist items for the action you performed and mark them done.

Edit an existing content (MDX) page

Checklist

  • Review changes using the MDX preview option
  • If the length of content >15000 chars, use the Content preview portal to view changes
  • If a redirect is needed to the existing page, add a key, value pair in redirects.json

Edit an existing API reference page

Checklist


Add a new content (MDX) page

Checklist

  • Create a .mdx file with the path as its name in the content folder
  • Add frontmatter with all the metadata
  • Review the order of items in Sidebar using the Sidebar preview option
  • Review changes using the MDX preview option
  • If the length of content >15000 chars, use the Content preview portal to view changes
  • Created a folder with the same name, if any children were to be added to the page
  • Once all changes are done, update the menu items by using the Menu Items option
  • Add a key, and value pair in redirects.json if you wish to have a redirect to the new page

Add a new API reference page

Checklist

  • Create a .json file with the product path as its name
  • Create an api-reference.mdx file in the respective product folder inside content folder
  • Add frontmatter with all the metadata
  • Review the order of items in Sidebar using the Sidebar preview option
  • Add API reference in JSON format (OpenAPI or Swagger) into created .json file.
  • Used the Content preview portal to view changes
  • Once all changes are done, update the menu items by using the Menu Items option

@siddu1819
siddu1819 requested a review from shashi-budati July 16, 2026 12:48
@siddu1819 siddu1819 self-assigned this Jul 16, 2026
siddu1819 and others added 26 commits July 17, 2026 15:09
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…ems.

Co-authored-by: Cursor <cursoragent@cursor.com>
Paths containing api-reference force the OpenAPI viewer, so Signal IQ MDX pages rendered blank. Move them to output-apis and redirect the old URLs.

Co-authored-by: Cursor <cursoragent@cursor.com>
Move output fetch docs to OpenAPI playground pages so responses get the same status-code coloring as Insights, with a landing page and separate specs per format.

Co-authored-by: Cursor <cursoragent@cursor.com>
Remove the output-apis self-redirect loop so the API reference index page loads.

Co-authored-by: Cursor <cursoragent@cursor.com>
Use a single api-reference OpenAPI page so the left bar switches to Setu Insights JSON, Excel and XML operations instead of nested docs pages.

Co-authored-by: Cursor <cursoragent@cursor.com>
Use a fresh outputs/api-reference URL to avoid stale redirects, with OpenAPI Overview plus Setu JSON, Excel and XML in the left panel.

Co-authored-by: Cursor <cursoragent@cursor.com>
Single api-reference OpenAPI page so the left panel shows Overview, Setu JSON, Setu Excel and Setu XML. Clear poisoned nested redirects.

Co-authored-by: Cursor <cursoragent@cursor.com>
Add api-reference/json|excel|xml page shells so the cached redirect target can render the OpenAPI playground with Overview and Setu JSON/Excel/XML.

Co-authored-by: Cursor <cursoragent@cursor.com>
Avoid year-long cached redirects on /api-reference by using /siq-api/api-reference so Overview, Setu JSON, Excel and XML can render like Insights.

Co-authored-by: Cursor <cursoragent@cursor.com>
…ldren.

Move overview content back to output-apis.mdx, serve JSON/Excel/XML as separate OpenAPI pages, and remove redirect loops from legacy siq-api paths.

Co-authored-by: Cursor <cursoragent@cursor.com>
The output-apis split hit CDN redirect loops on staging. Restore the siq-api/api-reference setup that served Overview plus Setu JSON, Excel and XML correctly.

Co-authored-by: Cursor <cursoragent@cursor.com>
Restore d56952b siq-api OpenAPI layout and replace markdown tables in the Overview with lists so they render correctly in the API reference UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
Use /report-apis/api-reference so CDN cannot serve stale redirect loops from siq-api/output-apis. Keep Insights-style OpenAPI left nav with Overview, Setu JSON, Setu Excel and Setu XML.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Use real Setu JSON and Excel success payloads, remove Setu XML from the API reference Overview and left nav.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…rence

Client-facing developer documentation for the UPI Issuance onboarding surface,
published to the Setu docs site.

- Guide pages: overview, quickstart, API envelope, device binding, OTP
  verification, VPA management, programs, payee blocklist, QA-env testing.
- OpenAPI spec (api-references/payments/upi-issuance.json) driving the interactive
  API reference: human-readable operation summaries, doc-ordered sections, internal
  endpoints excluded, per-operation error-code enums + examples, and consistent
  deviceId / mobile / idempotencyKey / cursor / token / id conventions across docs
  and refs.
- Nav registration in endpoints.json, menuItems.json, redirects.json.

Spec/code counterparts land under UPIIS-33/34/35.

Closes UPIIS-47
- swap 7 local img srcs to docs-assets CDN
- add field constraints/regex to user-otp & device-binding tables

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
anindya-setu and others added 30 commits July 27, 2026 01:46
Move the new resolution endpoint off /onboarding/ to /api/v1/vpa/resolve (VPA/payments
operation, not onboarding) across the OpenAPI reference, the guide, and the QA-testing
X-Sim-Resolution examples. Existing /onboarding/ endpoints are unchanged.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
44e7782 added vpa-resolution.mdx and renumbered the surrounding pages'
frontmatter, but never regenerated menuItems.json. The app derives both
routes and sidebar from that file, so the page 404'd.

Syncs menuItems.json to the MDX frontmatter: VPA resolution at 5 (after
Payee blocklist), Testing on QA env 5 -> 6, API reference 6 -> 7.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
"money" -> "payment", and drop the envelope / /api/v1 / active-user /
idempotencyKey preamble: the route line below already states all of it,
and idempotencyKey is carried by the OpenAPI spec and api-envelope.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
resolveVPA was tagged "VPA management", so it rendered as one item inside
that section rather than mirroring the guides, where VPA resolution is a
page of its own. Adds a "VPA resolution" tag and retags the operation.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Two descriptions on the VPA resolve operation named the NPCI protocol
call (ReqValAdd) directly. Replaced with a plain statement that
resolution happens via NPCI. Error codes and NPCI itself stay.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- status: spell out what RESOLVED / PENDING / FAILED each mean rather
  than the terse "(details present)" / "(error present)" shorthand
- entityType: PERSON is a non-merchant VPA, ENTITY a merchant VPA
- "Present on RESOLVED" -> "Present in the API response in case of
  successful resolution"
- "Present when verified" -> "Present when the payee VPA is a
  whitelisted / verified VPA"
- "Present for a resolved merchant" -> "...merchant VPA"
- verifiedUrl is a brand url, not a callback url

Applied to both the OpenAPI spec and the guide page so they match.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The merchant sample omitted franchiseName and verifiedLogo, and the
person sample omitted verified — all three are documented in the field
tables directly above.

The spec's 200 example was also self-contradictory: entityType PERSON
carrying verifiedName "Brand-X" and a brand logo. Replaced with a
complete, consistent verified-merchant response covering every field
the schema defines apart from the failure-only pair.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Checked against the implementation in setu-upi-issuance:

- name is NOT guaranteed masked. On our own handle it is the decrypted
  account name on record (resolve.go returns derefOr(v.AccountName);
  the integration test asserts "Test Holder"). On a foreign handle it is
  whatever the payee PSP put in the RespValAdd maskName attribute, which
  by convention carries the real name — our own outbound holderName()
  returns it in the clear, masking it only in logs.
- verified is omitted when false: the handler only sets it via
  `if res.Verified`. So it is present only for a verified payee, not on
  every successful resolution. Reverts the "verified": false line added
  to the person sample in 4a79b3b.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The implementation emits lowercase status values. vparesolve.State
defines pending / resolved / failed, and the comment there calls the
spelling the wire contract: "The values are LOWERCASE, matching every
other status the switch puts on the wire (app_user and vpa both carry
active / deregistered), so a client never has to remember which surface
shouts and which does not." The integration test asserts
res["status"] == "resolved".

Docs said RESOLVED / PENDING / FAILED throughout. Lowercased in the
status enum, its description and example, the response examples, the
errorCode / errorMessage notes, the guide's status table and samples,
and the qa-testing reference to the polling status.

Only these three status values changed. The uppercase enums (PERSON,
ENTITY, SAVINGS, CURRENT, SMALL, LARGE, ONLINE, OFFLINE, and the
ownership values) are uppercase in the implementation and are untouched.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The directive now spells the outcome field `status`, carrying the same
resolved / failed vocabulary as the resolve response (simresolve.go:
"An earlier revision spelled this field `outcome` with success /
failure, which meant a client pinning a failure wrote one word and read
back another"). The legacy `outcome` spelling is still accepted but is
never emitted, so document the current name.

- qa-testing: `outcome` (success|failure) -> `status` (resolved|failed),
  and the forced-failure example now sends {"status":"failed",...}
- spec X-Sim-Resolution: same, plus `verified` is an object
  ({name,url,logo}) whose presence flags the payee as verified — the
  description and both examples had it as a boolean

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- errorCode: "Network error code" -> "VPA resolution failure error code"
- add a line break above the merchant-block paragraph

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
50e3fa5 dropped it along with the rest of the intro preamble, which left
this the only feature page not mentioning it — payee-blocklist,
vpa-management, device-binding and user-otp all do. Restored in the
per-operation position those pages use (after the request field table)
rather than back in the intro.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Fill in the actual X-Sim-Resolution defaults from the upstream mock
  (buildRespValAddInner) instead of saying "a default": they differ by
  entityType — MOCK****PAYEE/SAVINGS for a PERSON, BRAND****X/CURRENT
  plus the Brand-X merchant block for an ENTITY, ICIC0000052 either way.
- Document the no-header behaviour: the outcome is driven by the payee
  VPA (fail/invalid -> failed, merchant/brand -> ENTITY, else PERSON),
  not by a fixed default response.
- Convert the two plain fenced blocks to CodeBlockWithCopy — this was
  the only UPI Issuance page not using the component.
- Add the two vpa/resolve steps to the full QA env run table.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Adds the webhook section to the VPA resolution guide: the key material
the TPAP supplies, the X-Setu-Event event, the sealed envelope, the
receiver's validation order, and Setu's retry behaviour.

Verified against setu-upi-issuance:
- event name / header      notify/ports: EventVPAResolve, EventHeader
- body is the resolve response field for field, terminal status only
- envelope ct/sk/iv/api/clientId/sig, api = the event name; RSA-OAEP
  (SHA-1) wrap of a 32-byte key, AES-256-CBC, sig = HMAC-SHA256 over
  the plaintext                          envelope/outbound.go: Seal
- 3 attempts, 500ms doubling backoff, 5s per attempt, retry on 5xx/408/
  429 only                 configs/config.json + notify.retryableStatus

Also fixes two examples that showed entityType PERSON alongside
verified:true with Brand-X branding — a person carrying merchant brand
verification. The webhook sample is now a plain PERSON matching the
poll's person sample, and the spec's schema-level example is synced to
the path-level one so the two no longer disagree.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Drop second-person voice from the notification section and the QA
  resolution notes. Every other UPI Issuance page is written in third
  person around "the TPAP / Issuing App"; these two were the only ones
  using you/your (41 and 4 occurrences).
- Markdown is not processed inside <Callout>, so **mirror image** and
  **decrypted plaintext** rendered literally. Switched to <b>/<i>, the
  pattern the other callouts already use. Same bug fixed in
  api-envelope, where `clientSecret` in a callout was showing its
  backticks.
- "so there is nothing to announce" -> "so a notification is not needed"
- Sample target url now tpap.example.com, matching the API spec's own
  example, instead of your-app.example.com

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Line breaks before the mirror-image callout, the per-environment note,
the idempotency note and the all-attempts-failed note.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ssuing App

"receiver" was the last actor name in the notification section that did
not match the house term used everywhere else in these docs.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
docs(UPI Issuance): VPA resolution + resolution notification, and restore the UPI Issuance doc set
Document exponential backoff plus EOD webhook retries, and wire the new reference into nav.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Keep BSP codes from wrapping mid-token in the PDF Flow table.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Add an API reference landing page for PDF APIs and Reports, and disable Try-it on PDF APIs.

Co-authored-by: Cursor <cursoragent@cursor.com>
Move Reports OpenAPI under report-apis/reports so it no longer collides with the parent path.

Co-authored-by: Cursor <cursoragent@cursor.com>
The sidebar still navigates to that legacy path; stop it from bouncing into Reports.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Add PDF upload BSP-103/104/106/107 examples and drop Try-it servers from API specs.

Co-authored-by: Cursor <cursoragent@cursor.com>
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.

3 participants