Skip to main content

CLAUDE.md

This file guides Claude Code (claude.ai/code) when working in this repository.

Project Overview

orqex/orchestrate-docs is the public documentation for Orqex Orchestrate, built with Mintlify and published at docs.orqex.com. It is English only. The documentation has one job: give an integrator everything needed to integrate, and nothing that helps a competitor understand or rebuild the product.

Disclosure policy (read this before writing anything)

Orchestrate is a strategic asset. These rules are not stylistic — they are the reason this documentation was rewritten from scratch.
  • Never list supported countries, currencies or payment methods. Coverage is discovered at runtime (/payment/intents/{id}/countries, .../countries/{cc}/methods) or looked up in the dashboard. No catalogues, no matrices, no counts.
  • Never name a payment provider, with one deliberate exception: the gateway_options reference on /payments/custom-checkout, which documents stripe, pawapay and test because integrators need those keys. Nowhere else.
  • Never explain internals: routing rules, failover decisions, gateway selection, scoring, orchestration strategies, DCC. failover on an attempt is documented as an informational field with no value list, and readers are told not to branch on it.
  • Never use coverage-implying examples. Use US / DE and USD / EUR, and the sandbox method code test. No African country codes, no real mobile-money or wallet method codes.
  • Never describe dashboard screens. Point to the dashboard as the place where configuration and coverage live, and stop there.
Before opening a PR, run the leak scan in “Validation” below.

Structure

Tabs: Guide, API Reference, SDK. There is deliberately no Dashboard tab.

Local commands

Conventions

  • Style: minimalist and integration-focused, in the spirit of ProcessOut and Stripe. Short prose, then the concrete thing. A page should be scannable in under a minute and complete enough to integrate from. Prefer a table or a code block over three paragraphs.
  • Theme: Orqex brand colours (#144419 / #cdf546) and the Axazara fonts. Logo and icon in images/ are used as-is. Do not change branding.
  • Code samples: cURL and PHP (the official SDK). Placeholders sk_live_... / sk_sandbox_....
  • Navigation: create the .mdx, then list its path without the extension in docs.json. Internal links are absolute, e.g. /payments/refunds.
  • Redirects: the old bilingual URLs (/en/..., /fr/...) are mapped in docs.json.redirects. Wildcard rules must stay last so specific rules win.

API reference

  • Generated from api-reference/openapi.json. Edit the spec, not per-endpoint pages.
  • The spec covers only the public API under /v1, and must match orqex/orchestrate-api routes/api/public/v1.php on main exactly — currently 25 operations. Never invent a field, path, enum value or response shape.
  • Mintlify only supports internal $ref within a single document.
  • Sanitisation carried by the spec: method_code and method are plain strings with no enum; failover.decision is an unenumerated object; gateway_options is a free-form object; examples use neutral data.

Accuracy rules

  • Mirror the backend. Verify against orqex/orchestrate-api on main before writing — Form Requests for parameters, API Resources for response shapes, app/Listeners/Pulses/ for webhook events and payloads, app/Enums/ for values.
  • Do not fabricate. Two traps that have already bitten:
    • Deliveries to a webhook_url are unsigned (doNotSign). Project endpoints are signed. Keep that distinction.
    • payment.attempt.action_required and payout.pending exist as identifiers but are not dispatched. Do not document them. Every other event goes to both channels.
    • Trigger names are not event names: payment.completed is subscribed to as payment_captured, and both refund events share payment_refunded.
  • Amounts are in major units on every resource, payouts included. fee_amount on a payout is the exception: a plain integer in minor units.
  • The sandbox test gateway outcome is driven by the last two digits of the payer’s phone number, not the amount. For payouts it is the last two digits of the destination (phone number, account number or wallet address).

Validation before a PR

  1. docs.json is valid JSON and every referenced page resolves to a file.
  2. ./node_modules/.bin/mintlify broken-links passes.
  3. Leak scan returns nothing outside the gateway_options table:
  1. main is protected (PR required); never push to it directly.