Skip to content

Document the dashboard route to API keys and an own-account ramp path - #1389

Merged
ebma merged 17 commits into
stagingfrom
docs/api-dashboard-keys-own-account
Sep 29, 2026
Merged

ebma merged 17 commits into
stagingfrom
docs/api-dashboard-keys-own-account

Conversation

@ebma

@ebma ebma commented Sep 29, 2026 •

Copy link
Copy Markdown
Member

Why

Integrator feedback showed two gaps in the API docs:

  • Authentication, Quick Start, and AI Agent Integration only described the programmatic OTP route to an API key. None of them mentioned the dashboard.
  • Integrators who ramp for their own account, such as a trading bot, had to work out from the managed-profile pages that they need no child profiles.

While checking the new text against the code, I found a stale claim in six places: bank-transfer buys (USD, MXN, COP, ARS) were said to receive their payment instructions (achPaymentData) in the POST /v1/ramp/start response. In fact the API returns them on the first POST /v1/ramp/update and on GET /v1/ramp/{id}, and the start response never carries them. The Quick Start example therefore printed undefined.

What

  • Authentication: a new section, "Get An API Key From The Dashboard". It covers production and sandbox dashboard URLs, email-code sign-in, API keys → Create credential, that the secret is shown once, and that existing customers must sign in with the email of their onboarded profile. Quick Start and AI Agent Integration link to it.

  • AI Agent Integration B.1, "Ramping On Your Own Account":

    • one-time setup in the dashboard: onboarding, payout account, API key;
    • the per-ramp sequence: quote → register → sign/update → fund → start → track;
    • the 15-minute start deadline;
    • why a bot may sign its own wallet transactions on its server.

    Quick Start links to it.

  • achPaymentData timing: corrected in pages 02, 04, 09 and 12, in the SDK README, and in the vortex-integration skill. Buys now show the payment instructions, the user pays, and only then does the client call start, matching the widget.

  • Follow-up consistency fixes:

    • The OpenAPI SimpleStatus said COMPLETED, but every ramp response returns COMPLETE. It now has an enum and a note that COMPLETE and FAILED are terminal.
    • The vortex-integration skill's sell recipe called the removed listAlfredpayFiatAccounts, passed "MEX", and read accounts[0].id. It now uses listDomesticFiatAccounts("MX") and fiatAccountId. Its error class names are also updated to the current Domestic* names.
    • The SDK README no longer names the bank-transfer payment partner.
  • EUR availability, stated once: pages disagreed. Some said EUR buy works only for users provisioned out of band, with no SDK, Dashboard or Widget support. Others described a live SDK flow. The published @vortexfi/sdk@0.9.0 has no EUR support (only the removed Mykobo handler), and production activation is pending. Every page, the SDK README and the skill now say the same thing: sandbox now, production pending, SDK support in the next release.

  • Business EUR accounts: the /v1/monerium-b2b/* endpoints, the deposit events, and the Managed Profiles EU corridor text carry the same note: available in sandbox, production pending.

  • EUR provider naming: the docs text now says "EUR provider". Released API names (/v1/monerium* routes, MONERIUM_* codes, monerium* phases, Monerium* SDK errors) stay, and docs/api/README.md records them as deliberate exceptions.

Verification

  • bun run docs:api:check and bun run wire-contract:check pass. docs:api:types regenerated the .d.ts.
  • The SDK names used in the skill and README (listDomesticFiatAccounts, Domestic* errors) exist in the published @vortexfi/sdk@0.9.0.
  • Dashboard strings were checked against apps/dashboard: sign-in, the API keys page, the create dialog, and the Onboarding page's corridor and payout-account flows.
  • The sandbox dashboard bundle was checked to target api-sandbox.vortexfinance.co, which issues *_test_* keys.
  • The achPaymentData release path was checked in ramp.service.ts, where updateRamp calls startPersistedFlow and the start response omits the field. The SDK was checked too: registerRamp returns the update response for these buys. Staging and main behave the same.

Reviewer notes

  • The docs now publicly say EUR buy and the business EUR accounts are sandbox-only, with production activation pending.

  • https://dashboard-sandbox.vortexfinance.co is published in the docs for the first time.

  • After merge, re-import the changed pages into Apidog (manual step).

Integrators only found the programmatic OTP route, so point Quick Start and AI Agent Integration at the dashboard steps in Authentication.
The API releases achPaymentData on the first ramp update and on status; the start response never carries it, so integrators following the docs read undefined.
Self-ramping integrators had to infer from managed-profile pages that they need no child profiles; spell out the setup and per-ramp sequence and link it from Quick Start.
@netlify

netlify Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for vrtx-dashboard canceled.

Name Link
🔨 Latest commit 58a0713
🔍 Latest deploy log https://app.netlify.com/projects/vrtx-dashboard/deploys/6abbcbe0594ffd00080c1eb5

@netlify

netlify Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for vortex-sandbox ready!

Name Link
🔨 Latest commit 58a0713
🔍 Latest deploy log https://app.netlify.com/projects/vortex-sandbox/deploys/6abbcbe0a4e1f90008529abf
😎 Deploy Preview https://deploy-preview-1389--vortex-sandbox.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@netlify

netlify Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for vortexfi ready!

Name Link
🔨 Latest commit 58a0713
🔍 Latest deploy log https://app.netlify.com/projects/vortexfi/deploys/6abbcbe03b731f0008574345
😎 Deploy Preview https://deploy-preview-1389--vortexfi.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

SimpleStatus described COMPLETED, but every ramp response maps phases to TransactionStatus, which returns COMPLETE, so spec-following clients never detected completion.
The skill still called listAlfredpayFiatAccounts, which no longer exists, passed an alpha-3 country, and read a nonexistent id field, so its sell recipe could not run.
Public docs name corridors, not providers, and the fiat-account note now points to the SDK method that returns the ID.
Pages disagreed on EUR: some described out-of-band provisioning with no SDK support, others a live SDK flow. The published SDK 0.9.0 has no EUR support and production is not yet activated, so every page now says sandbox now, production pending, SDK support in the next release. The same passages now say 'EUR provider' in prose while released routes, error codes and phase values keep their names, as recorded in the README exceptions.
The skill told agents EUR BUY is active through the SDK, which neither npm 0.9.0 nor production supports yet.
The business EUR onramp account and its deposit events share the EUR provider activation that production is still waiting on, so they carry the same sandbox note as EUR buys.

Copilot AI 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.

Copilot review overview

🟡 Changes recommended

Several new integration instructions still omit required steps or describe unavailable SDK behavior.

Review effort: Balanced
Findings: 6 Medium severity

Open (6)
What changed in this PR

This PR updates Vortex’s integration docs to help developers get API keys, ramp on their own account, and follow the correct bank-transfer and EUR flows.

Changes:

  • Add dashboard credential and own-account ramp guidance.
  • Correct bank-transfer payment-instruction timing and align EUR availability across guides.
  • Update the ramp status schema and SDK examples.
File Description
packages/​sdk/​README.md Updates bank-transfer and EUR guidance.
docs/​api/​README.md Records retained EUR API names.
docs/​api/​pages/​14-managed-profiles.md Clarifies business EUR availability.
docs/​api/​pages/​12-ai-agent-integration.md Adds the own-account ramp path.
docs/​api/​pages/​09-fiat-corridors.md Corrects payment timing and EUR guidance.
docs/​api/​pages/​07-webhooks.md Clarifies deposit-event availability.
docs/​api/​pages/​04-ramp-lifecycle.md Corrects the buy payment sequence.
docs/​api/​pages/​03-authentication-and-partner-keys.md Adds dashboard credential steps.
docs/​api/​pages/​02-quick-start-with-the-sdk.md Links setup guidance and fixes the payment example.
docs/​api/​pages/​01-overview.md Aligns the corridor overview.
docs/​api/​openapi/​vortex.openapi.json Corrects status values and availability notes.
docs/​api/​openapi/​vortex.openapi.d.ts Regenerates the OpenAPI types.
.agents/​skills/​vortex-integration/​SKILL.md Updates integration recipes and SDK names.

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread docs/api/pages/12-ai-agent-integration.md Outdated
Comment thread docs/api/pages/12-ai-agent-integration.md Outdated
Comment thread docs/api/pages/12-ai-agent-integration.md Outdated
Comment thread docs/api/pages/12-ai-agent-integration.md Outdated
Comment thread packages/sdk/README.md Outdated
Comment thread packages/sdk/README.md
Review found the own-account path sent EUR users to production keys, skipped EUR wallet linking and IBAN provisioning, omitted the country for the payout-account lookup, did not say direct clients sign the ephemeral transactions, and assumed verification creates the payout account.

Copilot AI 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.

Copilot review overview

🔵 Needs a closer look

The own-account EUR instruction and bank-transfer sell recipe still contain actionable integration errors.

Review effort: Balanced
Findings: None

Resolved since last review (6)
Previously missed (3)

In code that hasn't changed since last review

Medium severity Add and validate a payout account before accessing accounts[0]

.agents/​skills/​vortex-integration/​SKILL.md:355

Listing payout accounts is not enough for a newly verified seller: verification does not create one, and the dashboard requires a separate Add pay-out account action (as the SDK README and Fiat Corridors guide now explain). If no account was added, listDomesticFiatAccounts returns an empty list and the recipe's accounts[0].fiatAccountId fails. Add that prerequisite, guard the empty list in the example, and correct the later claim that accounts are created during onboarding.

Medium severity Use an MXN SELL quote for sell registration

.agents/​skills/​vortex-integration/​SKILL.md:387

The corrected account lookup makes the MXN sell sample reach registerRamp(quote, ...), but the only quote above is for a BUY (or is undefined if the sell snippet is copied alone). The SDK dispatches that quote to the onramp handler, which requires destinationAddress, so this recipe cannot register a sell. Create an MXN SELL quote from USDC to SPEI and pass that quote here.

Medium severity Select EUR customer type and sign with the returned permit signer

docs/​api/​pages/​12-ai-agent-integration.md:46

The new own-account step gives walletAddress for both SDK and raw EUR registration, but the raw API selects the permit owner from the authenticated EUR provider binding, not this field. A client that relies on the supplied address could ask the wrong wallet to sign; if the account has both individual and business bindings, omitting customerType also produces 409 MONERIUM_CUSTOMER_TYPE_REQUIRED. Specify that walletAddress is for the SDK, select the legal type when needed, and sign the returned permit using its signer.

The API derives the EUR permit owner from the provider binding and ignores walletAddress, which only the SDK uses; accounts holding both legal types must also send customerType.
The sell example reused the buy quote, so registerRamp dispatched it to the onramp handler, and it indexed an empty account list for sellers who had not added a pay-out account.

Copilot AI 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.

Copilot review overview

🔵 Needs a closer look

Public payment-sequencing and environment guidance needs final human validation, and two documentation corrections remain.

Review effort: Balanced
Findings: None

Previously missed (2)

In code that hasn't changed since last review

Low severity Use DomesticCountry.MX instead of string literal in SDK examples

docs/​api/​pages/​12-ai-agent-integration.md:46

The SDK parameter is the exported DomesticCountry enum, so TypeScript users cannot pass the string literal "MX" shown here; they get a type error before listing payout accounts. Use DomesticCountry.MX (imported from @vortexfi/sdk) in the SDK example, while keeping country=MX for HTTP. The new sell example in .agents/skills/vortex-integration/SKILL.md uses the same string and needs the same correction.

Low severity Document EUR sandbox-only availability for 0.9.0 users

packages/​sdk/​README.md:206

The README now directs 0.9.0 users to the direct API for EUR BUY, but does not say that EUR is available only in sandbox while production activation is pending. Someone following this page alone could try the production API with a live key. State the sandbox restriction next to the SDK-release requirement, as the Fiat Corridors guide does.

listDomesticFiatAccounts takes the exported DomesticCountry string enum, so the "MX" literal fails TypeScript type-checking.
@ebma
ebma requested a balanced review from Copilot September 29, 2026 14:32

Copilot AI 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.

Copilot review overview

🔵 Needs a closer look

Public payment-sequencing and EUR availability guidance warrants final human confirmation.

Review effort: Balanced
Findings: None

@ebma
ebma merged commit 68ca928 into staging Sep 29, 2026
7 checks passed
@ebma
ebma deleted the docs/api-dashboard-keys-own-account branch September 29, 2026 14:42
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