Skip to content

docs: add Ephemeral SPL Token section and remove stale spl-api docs#71

Open
dhruvja wants to merge 11 commits into
mainfrom
dhruvja/docs/ephemeral-spl-token
Open

docs: add Ephemeral SPL Token section and remove stale spl-api docs#71
dhruvja wants to merge 11 commits into
mainfrom
dhruvja/docs/ephemeral-spl-token

Conversation

@dhruvja

@dhruvja dhruvja commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a dedicated Ephemeral SPL Token product section to the docs and removes the stale, orphaned spl-api pages it replaces.

What changed

  • New top-level "Ephemeral SPL Token" tab (own pages/ephemeral-spl-token/ tree), added to the products overview:
    • How-to-Guide — Quickstart (SDK lifecycle), Smart Contract Integration (on-chain custody / PDA-signed transfers), Private Payments
    • Reference Material — Overview (eATA / Global Vault / delegation model, MIMD 0013)
    • API Reference — the full /v1/spl/* + swap + MCP surface, layered into Core Token API / Private Payments / Swap
  • Newly documented endpointsstealth-pool (POST + GET), transaction/send, undelegate-ephemeral-ata, transfer-queue/ensure-crank; plus drift fixes on deposit (private) and transfer (exactOut, optional visibility defaults, stealth-handle to, from/fees).
  • Removed stale spl-api docs — 56 orphaned pages (en/cn/jp/ko) describing the superseded /tx/* API, plus the now-orphaned privacy-openapi.json.
  • Reserved the published .../api-reference/per/introduction URL as a "Private Payments" funnel page in the PER tab that routes to the new section. Redirects added for the moved API pages.
  • Code samples extracted into /snippets/spl-tokens-code/, matching the house how-to pattern (QuickAccess → Steps → Software → Code Snippets Tabs → footer).

Breaking changes

None — redirects cover the moved API pages.

Summary by CodeRabbit

  • New Features

    • Launched an Ephemeral SPL Token documentation hub (overview, quickstart, smart contract integration, private payments, and a refreshed API reference).
    • Added new API reference pages and OpenAPI specs for core and private payments actions (including transaction sending, stealth pools, transfer queue crank, swap/quotes, and balance/private-balance).
    • Extended deposit with an optional private flag (defaulting to private) and refined transfer/auth details.
  • Documentation

    • Updated navigation and redirects to the new Ephemeral SPL Token routes and API reference layout.
    • Removed legacy Private Payments API reference pages and cleared prior SPL API reference content across supported languages; removed the old OpenAPI spec.
  • Chores

    • Updated .gitignore to ignore .env.

@dhruvja dhruvja requested review from GabrielePicco and jonasXchen and removed request for jonasXchen July 6, 2026 19:37
@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@dhruvja, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 54 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 89668c48-3549-415a-ab45-012c8ff5a012

📥 Commits

Reviewing files that changed from the base of the PR and between ad3e755 and ad09003.

📒 Files selected for processing (1)
  • docs.json

Walkthrough

Documentation is reorganized around a new ephemeral-spl-token API surface. New API references, OpenAPI contracts, guides, snippets, navigation, redirects, and cross-links are added while legacy localized API pages are removed or simplified.

Changes

Ephemeral SPL Token Documentation Migration

Layer / File(s) Summary
Navigation and redirect wiring
docs.json
Redirects and localized navigation route legacy API paths into the new Ephemeral SPL Token documentation hierarchy.
New API reference pages and OpenAPI contracts
pages/ephemeral-spl-token/api-reference/*
New endpoint pages and OpenAPI specifications cover SPL operations, authentication, private balances, stealth pools, transfers, transaction submission, and swaps.
Guides and integration documentation
pages/ephemeral-spl-token/*.mdx, pages/overview/...
New overview, private payments, quickstart, smart-contract integration, and AI development guidance document the token model and lifecycle.
SDK and on-chain lifecycle snippets
snippets/spl-tokens-code/*
TypeScript and Rust examples cover delegation, transfers, eATA setup, commit handling, undelegation, withdrawal, and custody flows.
Legacy API documentation transition
api-reference/spl-api/*, cn/..., jp/..., ko/..., pages/private-ephemeral-rollups-pers/...
Legacy localized API pages are removed, and the prior private payments introduction is reduced to a landing page.
Cross-site links and repository support
pages/templates/..., snippets/product-cards.mdx, .gitignore, .vale/...
Documentation links and product cards are updated, new terminology is accepted by Vale, and .env is ignored.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

  • magicblock-labs/docs#65: Updates the same private payments API-reference migration and related legacy OpenAPI-backed routes.

Suggested reviewers: sporicle, jonasXchen

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding the Ephemeral SPL Token docs section and removing stale spl-api docs.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dhruvja/docs/ephemeral-spl-token

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@dhruvja dhruvja requested a review from jonasXchen July 6, 2026 19:37
@mintlify

mintlify Bot commented Jul 6, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
magicblock-42 🟢 Ready View Preview Jul 6, 2026, 7:51 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 12

♻️ Duplicate comments (2)
pages/ephemeral-spl-token/api-reference/openapi/transaction-send.openapi.json (2)

19-27: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Same manual-header auth pattern as stealth-pool.openapi.json.

See the corresponding comment on stealth-pool.openapi.json — using components.securitySchemes + security instead of a plain header parameter would resolve the Checkov CKV_OPENAPI_4/5 findings here too and align with Mintlify's own conventions for Bearer auth.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@pages/ephemeral-spl-token/api-reference/openapi/transaction-send.openapi.json`
around lines 19 - 27, The transaction-send OpenAPI spec is modeling Bearer auth
as a plain header parameter, which should be converted to a proper security
scheme. Update the auth definition in transaction-send.openapi.json to use
components.securitySchemes with an HTTP Bearer scheme, then apply it via
security on the relevant operation(s) instead of the current authorization
parameter. Mirror the same pattern used in stealth-pool.openapi.json so the
OpenAPI auth setup matches Mintlify conventions and clears the CKV_OPENAPI_4/5
findings.

Source: Linters/SAST tools


50-57: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

cluster enum narrower than stealth-pool.openapi.json's.

Flagged from the stealth-pool.openapi.json side — see that file's comment on lines 67-74. This endpoint is missing mainnet-private/devnet-private in its enum.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@pages/ephemeral-spl-token/api-reference/openapi/transaction-send.openapi.json`
around lines 50 - 57, The `cluster` schema in `transaction-send.openapi.json` is
narrower than the matching definition in `stealth-pool.openapi.json`, so update
the enum in the `cluster` property to include the missing `mainnet-private` and
`devnet-private` values while keeping the existing string fallback. Make sure
the `cluster` definition stays aligned with the other OpenAPI spec by editing
the shared enum in the `cluster` object, not the surrounding request shape.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs.json`:
- Around line 30-32: The redirect entry for prepareWithdrawal in the docs
mapping sends users to the generic introduction page instead of the
withdrawal-specific page. Update the destination for the
/api-reference/per-api/prepareWithdrawal source in docs.json to point to
/pages/ephemeral-spl-token/api-reference/withdraw, keeping the surrounding
redirect entries unchanged.

In `@pages/ephemeral-spl-token/api-reference/openapi/deposit.openapi.json`:
- Line 58: The OpenAPI schema for the `private` property documents a default of
true, but the schema itself does not declare that default. Update the `private`
field definition in the deposit.openapi.json schema to include an explicit
default value of true so generators and validators can read it directly from the
schema, not just from the description.

In `@pages/ephemeral-spl-token/api-reference/openapi/stealth-pool.openapi.json`:
- Around line 44-49: Update the handle schemas in the OpenAPI definition so they
actually enforce the documented 255-byte limit. In the POST body `handle`
property and the GET `handle` query parameter, add the missing `maxLength`
constraint alongside the existing `minLength`/string metadata, using the
`handle` field definitions in the stealth-pool OpenAPI spec. Ensure both
locations match the same validation rule so the documented limit is enforced
consistently.
- Around line 19-27: The auth setup in this OpenAPI spec is using a manual
authorization header parameter instead of a bearer security scheme, which causes
the missing global/operation security rules. Update the document to define a
bearer auth scheme in components.securitySchemes and apply it through security
on the relevant operations in stead of the parameters entry. Use the existing
OpenAPI structure in stealth-pool.openapi.json and keep the change consistent
across the other /v1/spl/* specs that define auth, so the interactive docs can
auto-handle the token.

In
`@pages/ephemeral-spl-token/api-reference/openapi/transaction-send.openapi.json`:
- Around line 58-70: The schema for the send transaction request describes
`recentBlockhash` and `lastValidBlockHeight` as required when `confirm` is true,
but this is not enforced anywhere in the OpenAPI definition. Update the
transaction send request schema to use conditional validation (`if`/`then`) tied
to the `confirm` property so those fields become required only when `confirm` is
true, and keep the existing top-level required list for always-required fields
like `transactionBase64` and `sendTo`.

In `@pages/ephemeral-spl-token/api-reference/openapi/transfer.openapi.json`:
- Around line 82-84: The request schema now includes exactOut, but the
accompanying example object is missing it, so update the example in the
transfer.openapi.json request definition to show exactOut alongside the other
request fields. Make the same example change in the additional referenced
section so the samples stay consistent with the schema and the Transfer request
model.

In
`@pages/ephemeral-spl-token/api-reference/openapi/undelegate-ephemeral-ata.openapi.json`:
- Around line 19-27: The undelegate endpoint is exposing login auth as a plain
header parameter instead of an OpenAPI security requirement. Update the OpenAPI
definition for undelegate-ephemeral-ata.openapi.json to add a shared bearer
security scheme under components/securitySchemes and reference it from the
operation that currently defines the authorization header. Keep the existing
authorization parameter only if it is meant to remain ordinary header data;
otherwise remove it and use the standard bearer auth mechanism so tooling
recognizes the /v1/spl/login token flow.

In `@pages/ephemeral-spl-token/private-payments.mdx`:
- Around line 97-99: Update the callout in the private-payments docs so the
`POST /v1/transaction/send` link points to the transaction-send page instead of
the generic introduction page. Adjust the existing markdown link in the
private-payments content to use the endpoint-specific target, keeping the
surrounding text and `sendTo` flow description unchanged.

In `@snippets/spl-tokens-code/program.mdx`:
- Line 19: The CPI setup in the snippet uses the token program’s public key
instead of its account info, which does not match Anchor’s expected API. Update
the CpiContext::new call in the token-program CPI example to pass
ctx.accounts.token_program.to_account_info() alongside cpi_accounts so the
context is built with an AccountInfo.

In `@snippets/spl-tokens-code/sc-non-custody.mdx`:
- Around line 3-8: The SPL token transfer snippet is passing the wrong type into
CpiContext::new by using ctx.accounts.token_program.key() instead of an
AccountInfo. Update the transfer call in sc-non-custody.mdx so the token program
argument uses ctx.accounts.token_program.to_account_info(), keeping the existing
SplTransfer account setup unchanged.

In `@snippets/spl-tokens-code/sc-post-commit.mdx`:
- Around line 4-8: The example is calling the signed builder path without
explaining the required public MagicIntentBundleBuilder reference. Update the
snippet around MagicIntentBundleBuilder::new and build_and_invoke_signed so it
either uses the existing build_and_invoke example path or, if the signed variant
is intended, add a clear SDK/doc reference showing that a public
MagicIntentBundleBuilder reference is required for build_and_invoke_signed.

In `@snippets/spl-tokens-code/sc-transfer.mdx`:
- Around line 8-14: The CPI setup in the token transfer example is passing the
program key instead of the program account info, so update the
`CpiContext::new_with_signer` call in `sc-transfer.mdx` to use
`token_program.to_account_info()`; make the same account-info fix in
`sc-non-custody.mdx` for the `CpiContext::new(...)` usage. Keep the surrounding
`SplTransfer` and signer seed wiring unchanged, only correct the program
argument type.

---

Duplicate comments:
In
`@pages/ephemeral-spl-token/api-reference/openapi/transaction-send.openapi.json`:
- Around line 19-27: The transaction-send OpenAPI spec is modeling Bearer auth
as a plain header parameter, which should be converted to a proper security
scheme. Update the auth definition in transaction-send.openapi.json to use
components.securitySchemes with an HTTP Bearer scheme, then apply it via
security on the relevant operation(s) instead of the current authorization
parameter. Mirror the same pattern used in stealth-pool.openapi.json so the
OpenAPI auth setup matches Mintlify conventions and clears the CKV_OPENAPI_4/5
findings.
- Around line 50-57: The `cluster` schema in `transaction-send.openapi.json` is
narrower than the matching definition in `stealth-pool.openapi.json`, so update
the enum in the `cluster` property to include the missing `mainnet-private` and
`devnet-private` values while keeping the existing string fallback. Make sure
the `cluster` definition stays aligned with the other OpenAPI spec by editing
the shared enum in the `cluster` object, not the surrounding request shape.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 6dbd03b9-2fe1-4717-94cc-a952fd3d3f8d

📥 Commits

Reviewing files that changed from the base of the PR and between 4a5974a and 5b4e115.

📒 Files selected for processing (129)
  • api-reference/spl-api/checked-transfer.mdx
  • api-reference/spl-api/create-ephemeral-ata-permission.mdx
  • api-reference/spl-api/delegate-ephemeral-ata-permission.mdx
  • api-reference/spl-api/delegate-ephemeral-ata.mdx
  • api-reference/spl-api/deposit-spl-tokens.mdx
  • api-reference/spl-api/get-config.mdx
  • api-reference/spl-api/initialize-ata.mdx
  • api-reference/spl-api/initialize-ephemeral-ata.mdx
  • api-reference/spl-api/initialize-global-vault.mdx
  • api-reference/spl-api/introduction-per.mdx
  • api-reference/spl-api/reset-ephemeral-ata-permission.mdx
  • api-reference/spl-api/undelegate-ephemeral-ata-permission.mdx
  • api-reference/spl-api/undelegate-ephemeral-ata.mdx
  • api-reference/spl-api/withdraw-spl-tokens.mdx
  • cn/api-reference/spl-api/checked-transfer.mdx
  • cn/api-reference/spl-api/create-ephemeral-ata-permission.mdx
  • cn/api-reference/spl-api/delegate-ephemeral-ata-permission.mdx
  • cn/api-reference/spl-api/delegate-ephemeral-ata.mdx
  • cn/api-reference/spl-api/deposit-spl-tokens.mdx
  • cn/api-reference/spl-api/get-config.mdx
  • cn/api-reference/spl-api/initialize-ata.mdx
  • cn/api-reference/spl-api/initialize-ephemeral-ata.mdx
  • cn/api-reference/spl-api/initialize-global-vault.mdx
  • cn/api-reference/spl-api/introduction-per.mdx
  • cn/api-reference/spl-api/reset-ephemeral-ata-permission.mdx
  • cn/api-reference/spl-api/undelegate-ephemeral-ata-permission.mdx
  • cn/api-reference/spl-api/undelegate-ephemeral-ata.mdx
  • cn/api-reference/spl-api/withdraw-spl-tokens.mdx
  • docs.json
  • jp/api-reference/spl-api/checked-transfer.mdx
  • jp/api-reference/spl-api/create-ephemeral-ata-permission.mdx
  • jp/api-reference/spl-api/delegate-ephemeral-ata-permission.mdx
  • jp/api-reference/spl-api/delegate-ephemeral-ata.mdx
  • jp/api-reference/spl-api/deposit-spl-tokens.mdx
  • jp/api-reference/spl-api/get-config.mdx
  • jp/api-reference/spl-api/initialize-ata.mdx
  • jp/api-reference/spl-api/initialize-ephemeral-ata.mdx
  • jp/api-reference/spl-api/initialize-global-vault.mdx
  • jp/api-reference/spl-api/introduction-per.mdx
  • jp/api-reference/spl-api/reset-ephemeral-ata-permission.mdx
  • jp/api-reference/spl-api/undelegate-ephemeral-ata-permission.mdx
  • jp/api-reference/spl-api/undelegate-ephemeral-ata.mdx
  • jp/api-reference/spl-api/withdraw-spl-tokens.mdx
  • ko/api-reference/spl-api/checked-transfer.mdx
  • ko/api-reference/spl-api/create-ephemeral-ata-permission.mdx
  • ko/api-reference/spl-api/delegate-ephemeral-ata-permission.mdx
  • ko/api-reference/spl-api/delegate-ephemeral-ata.mdx
  • ko/api-reference/spl-api/deposit-spl-tokens.mdx
  • ko/api-reference/spl-api/get-config.mdx
  • ko/api-reference/spl-api/initialize-ata.mdx
  • ko/api-reference/spl-api/initialize-ephemeral-ata.mdx
  • ko/api-reference/spl-api/initialize-global-vault.mdx
  • ko/api-reference/spl-api/introduction-per.mdx
  • ko/api-reference/spl-api/reset-ephemeral-ata-permission.mdx
  • ko/api-reference/spl-api/undelegate-ephemeral-ata-permission.mdx
  • ko/api-reference/spl-api/undelegate-ephemeral-ata.mdx
  • ko/api-reference/spl-api/withdraw-spl-tokens.mdx
  • pages/ephemeral-spl-token/api-reference/balance.mdx
  • pages/ephemeral-spl-token/api-reference/challenge.mdx
  • pages/ephemeral-spl-token/api-reference/deposit.mdx
  • pages/ephemeral-spl-token/api-reference/health.mdx
  • pages/ephemeral-spl-token/api-reference/initialize-mint.mdx
  • pages/ephemeral-spl-token/api-reference/introduction.mdx
  • pages/ephemeral-spl-token/api-reference/is-mint-initialized.mdx
  • pages/ephemeral-spl-token/api-reference/login.mdx
  • pages/ephemeral-spl-token/api-reference/mcp.mdx
  • pages/ephemeral-spl-token/api-reference/openapi/balance.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/challenge.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/deposit.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/health.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/initialize-mint.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/is-mint-initialized.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/login.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/mcp.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/private-balance.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/quote.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/stealth-pool.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/swap.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/transaction-send.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/transfer-queue-ensure-crank.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/transfer.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/undelegate-ephemeral-ata.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/withdraw.openapi.json
  • pages/ephemeral-spl-token/api-reference/private-balance.mdx
  • pages/ephemeral-spl-token/api-reference/quote.mdx
  • pages/ephemeral-spl-token/api-reference/stealth-pool-status.mdx
  • pages/ephemeral-spl-token/api-reference/stealth-pool.mdx
  • pages/ephemeral-spl-token/api-reference/swap.mdx
  • pages/ephemeral-spl-token/api-reference/transaction-send.mdx
  • pages/ephemeral-spl-token/api-reference/transfer-queue-ensure-crank.mdx
  • pages/ephemeral-spl-token/api-reference/transfer.mdx
  • pages/ephemeral-spl-token/api-reference/undelegate-ephemeral-ata.mdx
  • pages/ephemeral-spl-token/api-reference/withdraw.mdx
  • pages/ephemeral-spl-token/overview.mdx
  • pages/ephemeral-spl-token/private-payments.mdx
  • pages/ephemeral-spl-token/quickstart.mdx
  • pages/ephemeral-spl-token/smart-contract-integration.mdx
  • pages/overview/additional-information/pricing.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/balance.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/challenge.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/deposit.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/health.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/initialize-mint.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/introduction.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/is-mint-initialized.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/login.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/mcp.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/openapi/privacy-openapi.json
  • pages/private-ephemeral-rollups-pers/api-reference/per/private-balance.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/quote.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/swap.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/transfer.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/withdraw.mdx
  • pages/private-ephemeral-rollups-pers/how-to-guide/ephemeral-spl-private-payments.mdx
  • pages/templates/private-payments.mdx
  • snippets/product-cards.mdx
  • snippets/quick-access-spl.mdx
  • snippets/spl-tokens-code/delegate.mdx
  • snippets/spl-tokens-code/program.mdx
  • snippets/spl-tokens-code/sc-commit.mdx
  • snippets/spl-tokens-code/sc-create-eata.mdx
  • snippets/spl-tokens-code/sc-delegate.mdx
  • snippets/spl-tokens-code/sc-ephemeral.mdx
  • snippets/spl-tokens-code/sc-non-custody.mdx
  • snippets/spl-tokens-code/sc-post-commit.mdx
  • snippets/spl-tokens-code/sc-transfer.mdx
  • snippets/spl-tokens-code/transfer.mdx
  • snippets/spl-tokens-code/undelegate.mdx
  • snippets/spl-tokens-code/withdraw.mdx
💤 Files with no reviewable changes (71)
  • pages/private-ephemeral-rollups-pers/api-reference/per/health.mdx
  • cn/api-reference/spl-api/introduction-per.mdx
  • jp/api-reference/spl-api/reset-ephemeral-ata-permission.mdx
  • ko/api-reference/spl-api/get-config.mdx
  • api-reference/spl-api/initialize-ephemeral-ata.mdx
  • cn/api-reference/spl-api/delegate-ephemeral-ata.mdx
  • jp/api-reference/spl-api/delegate-ephemeral-ata-permission.mdx
  • jp/api-reference/spl-api/delegate-ephemeral-ata.mdx
  • ko/api-reference/spl-api/delegate-ephemeral-ata.mdx
  • api-reference/spl-api/undelegate-ephemeral-ata.mdx
  • jp/api-reference/spl-api/checked-transfer.mdx
  • cn/api-reference/spl-api/initialize-ata.mdx
  • cn/api-reference/spl-api/undelegate-ephemeral-ata-permission.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/swap.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/deposit.mdx
  • api-reference/spl-api/initialize-ata.mdx
  • ko/api-reference/spl-api/deposit-spl-tokens.mdx
  • cn/api-reference/spl-api/reset-ephemeral-ata-permission.mdx
  • cn/api-reference/spl-api/initialize-global-vault.mdx
  • api-reference/spl-api/delegate-ephemeral-ata.mdx
  • jp/api-reference/spl-api/initialize-ephemeral-ata.mdx
  • cn/api-reference/spl-api/delegate-ephemeral-ata-permission.mdx
  • api-reference/spl-api/delegate-ephemeral-ata-permission.mdx
  • ko/api-reference/spl-api/undelegate-ephemeral-ata-permission.mdx
  • cn/api-reference/spl-api/undelegate-ephemeral-ata.mdx
  • jp/api-reference/spl-api/initialize-ata.mdx
  • api-reference/spl-api/withdraw-spl-tokens.mdx
  • api-reference/spl-api/deposit-spl-tokens.mdx
  • cn/api-reference/spl-api/create-ephemeral-ata-permission.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/login.mdx
  • ko/api-reference/spl-api/checked-transfer.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/balance.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/is-mint-initialized.mdx
  • api-reference/spl-api/undelegate-ephemeral-ata-permission.mdx
  • api-reference/spl-api/checked-transfer.mdx
  • api-reference/spl-api/get-config.mdx
  • jp/api-reference/spl-api/undelegate-ephemeral-ata.mdx
  • jp/api-reference/spl-api/undelegate-ephemeral-ata-permission.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/mcp.mdx
  • jp/api-reference/spl-api/create-ephemeral-ata-permission.mdx
  • ko/api-reference/spl-api/reset-ephemeral-ata-permission.mdx
  • jp/api-reference/spl-api/deposit-spl-tokens.mdx
  • ko/api-reference/spl-api/create-ephemeral-ata-permission.mdx
  • ko/api-reference/spl-api/initialize-ata.mdx
  • jp/api-reference/spl-api/get-config.mdx
  • cn/api-reference/spl-api/deposit-spl-tokens.mdx
  • api-reference/spl-api/initialize-global-vault.mdx
  • api-reference/spl-api/create-ephemeral-ata-permission.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/quote.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/private-balance.mdx
  • ko/api-reference/spl-api/initialize-ephemeral-ata.mdx
  • ko/api-reference/spl-api/withdraw-spl-tokens.mdx
  • cn/api-reference/spl-api/checked-transfer.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/transfer.mdx
  • jp/api-reference/spl-api/initialize-global-vault.mdx
  • cn/api-reference/spl-api/withdraw-spl-tokens.mdx
  • api-reference/spl-api/reset-ephemeral-ata-permission.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/challenge.mdx
  • ko/api-reference/spl-api/undelegate-ephemeral-ata.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/openapi/privacy-openapi.json
  • pages/private-ephemeral-rollups-pers/api-reference/per/withdraw.mdx
  • cn/api-reference/spl-api/get-config.mdx
  • ko/api-reference/spl-api/introduction-per.mdx
  • api-reference/spl-api/introduction-per.mdx
  • jp/api-reference/spl-api/introduction-per.mdx
  • ko/api-reference/spl-api/initialize-global-vault.mdx
  • ko/api-reference/spl-api/delegate-ephemeral-ata-permission.mdx
  • jp/api-reference/spl-api/withdraw-spl-tokens.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/initialize-mint.mdx
  • pages/private-ephemeral-rollups-pers/how-to-guide/ephemeral-spl-private-payments.mdx
  • cn/api-reference/spl-api/initialize-ephemeral-ata.mdx

Comment thread docs.json
Comment thread pages/ephemeral-spl-token/api-reference/openapi/deposit.openapi.json Outdated
Comment thread pages/ephemeral-spl-token/api-reference/openapi/stealth-pool.openapi.json Outdated
Comment thread pages/ephemeral-spl-token/private-payments.mdx
Comment thread snippets/spl-tokens-code/program.mdx Outdated
Comment thread snippets/spl-tokens-code/sc-non-custody.mdx Outdated
Comment thread snippets/spl-tokens-code/sc-post-commit.mdx Outdated
Comment thread snippets/spl-tokens-code/sc-transfer.mdx

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
pages/ephemeral-spl-token/api-reference/openapi/transfer.openapi.json (1)

45-45: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Add inner required to the fees response object.

When fees is present in the response, lamports and tokens should be required. Without an inner required array, a response like "fees": {} passes schema validation but conveys no fee information.

🛡️ Proposed fix
                     "fees": {
                       "type": "object",
                       "description": "Fees applied to the transfer, in base units.",
                       "properties": {
                         "lamports": { "type": "string" },
                         "tokens": { "type": "string" }
-                      }
+                      },
+                      "required": ["lamports", "tokens"]
                     }

Also applies to: 70-84, 134-134, 143-143, 170-183

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pages/ephemeral-spl-token/api-reference/openapi/transfer.openapi.json` at
line 45, The `fees` response object in the OpenAPI schema is missing an inner
required list, so empty `fees` objects can still validate. Update the schema
definitions for `fees` in the transfer OpenAPI document so that, whenever `fees`
is present, the `lamports` and `tokens` properties are marked required within
the `fees` object itself. Apply the same change consistently across the affected
response schema blocks so the `fees` object always contains both values.
docs.json (1)

444-444: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Localized navigation (cn/jp/ko) missing the new "Ephemeral SPL Token" tab.

The English navigation was restructured — the old "Private Payments API" group was replaced with a slim "Private Payments" group and a new "Ephemeral SPL Token" tab was added. However, the cn (line 444), jp (line 455), and ko (line 466) navigation tabs still reference the old "Private Payments API" group with 13 per-API pages and do not include the new "Ephemeral SPL Token" tab at all.

This means non-English users have no navigable path to the new pages/ephemeral-spl-token/ documentation section. Additionally, the old per-API pages referenced in localized nav may now be inconsistent with the simplified English per/introduction page.

Also applies to: 455-455, 466-466

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs.json` at line 444, The localized nav entries in docs.json still use the
old “Private Payments API” grouping and omit the new “Ephemeral SPL Token” tab.
Update the cn/jp/ko tab definitions to match the English navigation structure by
replacing the old PER-heavy group in the relevant tab objects (e.g. the “Private
Ephemeral Rollup” tabs) with the simplified “Private Payments” group and adding
the new “Ephemeral SPL Token” page path. Keep the identifiers in the same tab
objects so localized users can reach the new pages and the nav stays consistent
across languages.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@docs.json`:
- Line 444: The localized nav entries in docs.json still use the old “Private
Payments API” grouping and omit the new “Ephemeral SPL Token” tab. Update the
cn/jp/ko tab definitions to match the English navigation structure by replacing
the old PER-heavy group in the relevant tab objects (e.g. the “Private Ephemeral
Rollup” tabs) with the simplified “Private Payments” group and adding the new
“Ephemeral SPL Token” page path. Keep the identifiers in the same tab objects so
localized users can reach the new pages and the nav stays consistent across
languages.

In `@pages/ephemeral-spl-token/api-reference/openapi/transfer.openapi.json`:
- Line 45: The `fees` response object in the OpenAPI schema is missing an inner
required list, so empty `fees` objects can still validate. Update the schema
definitions for `fees` in the transfer OpenAPI document so that, whenever `fees`
is present, the `lamports` and `tokens` properties are marked required within
the `fees` object itself. Apply the same change consistently across the affected
response schema blocks so the `fees` object always contains both values.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: d8175bc0-8504-4433-a51e-6b9da7ea9db3

📥 Commits

Reviewing files that changed from the base of the PR and between 5b4e115 and 23ab0ef.

📒 Files selected for processing (7)
  • .gitignore
  • docs.json
  • pages/ephemeral-spl-token/api-reference/openapi/deposit.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/stealth-pool.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/transaction-send.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/transfer.openapi.json
  • pages/ephemeral-spl-token/private-payments.mdx

…nd cover the eata lifecycle on the skill page
dhruvja added a commit that referenced this pull request Jul 9, 2026
## Summary

Fixes every broken link flagged by Mintlify's `link-rot` validation
across all locales (en/cn/jp/ko): **64 → 0**.

## Changes

- **Unity SDK guides:** repoint legacy
`/Build/SolanaUnitySDK/guides/...` links to
`/pages/tools/solana-unity-sdk/guides/...` (locale-prefixed for
cn/jp/ko).
- **Anchor guide:** migrated into the live nav at
`pages/ephemeral-rollups-ers/how-to-guide/anchor` (×4 locales +
`docs.json`) so the Counter template's "Anchor Integration" card
resolves.
- **get-started intro cards:** repoint `smart-router` / `magic-router` →
`ephemeral-rollups-ers/introduction/magic-router`, and `overview` →
`.../how-to-guide/quickstart`.
- **Missing images:** restored 7 Unity-SDK screenshots dropped by an
earlier "Delete mintlify-docs/images" commit (recovered from git
history) + fixed a missing leading slash.
- **spl-api:** repoint `transfer-ephemeral-ata` → `checked-transfer`;
unlink the `root`/health endpoint (no page exists).

## Testing

- `mint broken-links` → **success, no broken links found** (was 64).

## Notes

- The `spl-api` links are fixed here; if PR #71 (Ephemeral SPL Token)
replaces that tree, these edits are simply superseded — no conflict
expected.
dhruvja added 2 commits July 9, 2026 13:21
…spl-token

# Conflicts:
#	api-reference/spl-api/introduction-per.mdx
#	cn/api-reference/spl-api/introduction-per.mdx
#	jp/api-reference/spl-api/introduction-per.mdx
#	ko/api-reference/spl-api/introduction-per.mdx

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
pages/ephemeral-spl-token/api-reference/openapi/stealth-pool.openapi.json (2)

141-147: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

GET cluster schema is less constrained than POST.

The POST cluster parameter (lines 69-76) uses anyOf with enum: ["mainnet", "devnet", "mainnet-private", "devnet-private"] plus a fallback string, but the GET cluster parameter is just { "type": "string" } with no enum validation. Same conceptual parameter on the same endpoint path should have a consistent schema so clients get validation feedback on invalid cluster values.

♻️ Proposed fix
           {
             "name": "cluster",
             "in": "query",
             "required": false,
             "description": "Optional. Cluster selector or custom http(s) RPC URL.",
-            "schema": { "type": "string", "example": "mainnet" }
+            "schema": {
+              "anyOf": [
+                { "type": "string", "enum": ["mainnet", "devnet", "mainnet-private", "devnet-private"] },
+                { "type": "string" }
+              ],
+              "example": "mainnet"
+            }
           }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pages/ephemeral-spl-token/api-reference/openapi/stealth-pool.openapi.json`
around lines 141 - 147, Align the GET cluster query parameter schema with the
POST cluster schema: update the parameter named "cluster" to use the same anyOf
structure, including the four allowed enum values and the fallback string for
custom HTTP(S) RPC URLs. Preserve its optional status and description while
ensuring both methods provide consistent validation.

108-118: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

setupTransaction is missing a required array and sendRpcEndpoint.

The description says "The base-chain setup transaction (same field set as the top-level transaction)," but the nested object omits sendRpcEndpoint (present at the top level on line 102) and has no required array. Without required, none of the listed properties are enforced, and the missing sendRpcEndpoint contradicts the "same field set" claim. If sendRpcEndpoint is intentionally omitted for base-chain setup transactions, clarify the description; otherwise add it.

♻️ Proposed fix (if sendRpcEndpoint belongs in setupTransaction)
                   "setupTransaction": {
                     "type": "object",
                     "description": "The base-chain setup transaction (same field set as the top-level transaction).",
                     "properties": {
                       "transactionBase64": { "type": "string" },
                       "sendTo": { "type": "string", "enum": ["base", "ephemeral"] },
+                      "sendRpcEndpoint": { "type": "string", "format": "uri" },
                       "recentBlockhash": { "type": "string" },
                       "lastValidBlockHeight": { "type": "integer" },
                       "instructionCount": { "type": "integer", "minimum": 0 },
                       "requiredSigners": { "type": "array", "items": { "type": "string" } }
-                    }
+                    },
+                    "required": ["transactionBase64", "sendTo", "recentBlockhash", "lastValidBlockHeight", "instructionCount", "requiredSigners"]
                   }

If sendRpcEndpoint is intentionally absent for setup transactions, update the description to say "same field set as the top-level transaction, except sendRpcEndpoint" and still add the required array for the remaining fields.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pages/ephemeral-spl-token/api-reference/openapi/stealth-pool.openapi.json`
around lines 108 - 118, Update the setupTransaction schema to match its stated
contract: add sendRpcEndpoint to its properties if setup transactions support
it, and add a required array covering all mandatory fields consistent with the
top-level transaction. If sendRpcEndpoint is intentionally excluded, revise the
description to explicitly state the exception while still defining required for
the remaining properties.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pages/overview/additional-information/ai-dev-skill.mdx`:
- Line 38: Update the Ephemeral SPL Token lifecycle bullet to use the canonical
“Ephemeral SPL Token API” name and link it to the relevant reference under the
existing Ephemeral SPL Token API documentation, replacing the undefined
`ephemeral-spl-api` term while preserving the SDK/direct API distinction.

In `@pages/private-ephemeral-rollups-pers/api-reference/per/introduction.mdx`:
- Around line 36-42: Update the “API Reference” Card href in the API reference
introduction page from the challenge endpoint to the introduction page, matching
the destination used by the Note and exposing the full endpoint listing.

---

Outside diff comments:
In `@pages/ephemeral-spl-token/api-reference/openapi/stealth-pool.openapi.json`:
- Around line 141-147: Align the GET cluster query parameter schema with the
POST cluster schema: update the parameter named "cluster" to use the same anyOf
structure, including the four allowed enum values and the fallback string for
custom HTTP(S) RPC URLs. Preserve its optional status and description while
ensuring both methods provide consistent validation.
- Around line 108-118: Update the setupTransaction schema to match its stated
contract: add sendRpcEndpoint to its properties if setup transactions support
it, and add a required array covering all mandatory fields consistent with the
top-level transaction. If sendRpcEndpoint is intentionally excluded, revise the
description to explicitly state the exception while still defining required for
the remaining properties.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 8cb24cfd-1ce8-4d47-ac15-2fb682c338f3

📥 Commits

Reviewing files that changed from the base of the PR and between 23ab0ef and c796b1b.

📒 Files selected for processing (15)
  • .vale/styles/config/vocabularies/Mintlify/accept.txt
  • docs.json
  • pages/ephemeral-spl-token/api-reference/openapi/private-balance.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/stealth-pool.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/transaction-send.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/transfer.openapi.json
  • pages/ephemeral-spl-token/api-reference/openapi/undelegate-ephemeral-ata.openapi.json
  • pages/ephemeral-spl-token/private-payments.mdx
  • pages/ephemeral-spl-token/quickstart.mdx
  • pages/overview/additional-information/ai-dev-skill.mdx
  • pages/private-ephemeral-rollups-pers/api-reference/per/introduction.mdx
  • snippets/spl-tokens-code/program.mdx
  • snippets/spl-tokens-code/sc-non-custody.mdx
  • snippets/spl-tokens-code/sc-post-commit.mdx
  • snippets/spl-tokens-code/sc-transfer.mdx

Comment thread pages/overview/additional-information/ai-dev-skill.mdx Outdated

@jonasXchen jonasXchen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Suggesting to put this under ER / PER. Alternatively if as part of products, it may be better to put it in the order after Solana VRF.

To reduce confusion of Ephemeral SPL Token as new standard, we may want to change the naming to SPL Token since it has and is the same standard but applied on rollups.

@dhruvja

dhruvja commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

Suggesting to put this under ER / PER. Alternatively if as part of products, it may be better to put it in the order after Solana VRF.

To reduce confusion of Ephemeral SPL Token as new standard, we may want to change the naming to SPL Token since it has and is the same standard but applied on rollups.

I agree with you. I have made the changes here: ad09003

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