Skip to content

docs(sdk/payout-service): add per-operation docs for java, node, pyth… - #2102

Open
manojradhakrishnan wants to merge 5 commits into
mainfrom
docs/payout-service-sdk-operation-docs
Open

docs(sdk/payout-service): add per-operation docs for java, node, pyth…#2102
manojradhakrishnan wants to merge 5 commits into
mainfrom
docs/payout-service-sdk-operation-docs

Conversation

@manojradhakrishnan

Copy link
Copy Markdown
Contributor

Description

Adds the missing per-operation documentation pages for the Payout Service across all four SDK languages (Java, Node, Python, PHP). Previously each docs-generated/sdks/{java,node,python,php}/payout-service directory held only a README.md operations table — the individual method pages did not exist. Since docs/SUMMARY.md already lists per-operation nav entries for the java/node/python payout service, those links resolved to non-existent pages and rendered blank on docs.hyperswitch.io.

32 new files = 8 operations × 4 languages: create, create-link, create-recipient, enroll-disburse-account, get, stage, transfer, void.

Each page was generated per the docs/rules/rules.md SDK Reference Operation Rules (SP1–SP7):

Overview / Purpose / Request Fields / Response Fields / Next Steps replicated from the canonical api-reference/services/payout-service/.md.
Field names converted to each language's convention (camelCase for java/node/php, snake_case for python).
RPC terminology replaced with method (SP6).
The grpcurl Example section replaced with language-specific SDK code — SDK Setup + Request + Response (SP3).
HTML-comment-wrapped front matter incl. sdk_language, approved: false (SP7 / C1).
Motivation and Context
The prism SDK nav advertised payout method pages that were never written, so live SDK URLs (e.g. docs.hyperswitch.io/integrations/prism/node/payout-service/create) rendered as blank pages. The API Reference is the canonical interface source; these SDK pages mirror it in the prism source repo — which is the intended home for prism docs — so the phantom nav entries now resolve to real content.

Docs-only change. No open issue linked (documentation fix).

Additional Changes
This PR modifies the API contract
This PR modifies application configuration/environment variables
No code, proto, config, or API-contract changes — documentation only.

Out of scope: PHP has no SDK section in docs/SUMMARY.md; adding a full PHP nav tree is out of scope. PHP payout pages are created for parity with the other languages and the existing PHP README, but no SUMMARY nav entry is added for them.

How did you test it?
Docs repo has no compile step. Verified manually:

All 32 files created and contain sdk_language front matter.
No residual RPC tokens; no stray backticked PascalCase RPC tokens.
All Next Steps relative links resolve within their directory.
java/node/python SUMMARY.md payout nav entries now map 1:1 to the created filenames.
Pages retain approved: false — human doc review still required before publishing.

JeevaRamu0104
JeevaRamu0104 previously approved these changes Aug 13, 2026
Sakilmostak
Sakilmostak previously approved these changes Aug 13, 2026
@nfarah86

Copy link
Copy Markdown

Hi @manojradhakrishnan I took a review of this PR, and had a question...

  1. Eligibility is undocumented. The proto declares 9 payout RPCs. However, every doc surface has 8.
    1a) you can find the proto here:
    service PayoutService {
    // Creates a payout.
    rpc Create(PayoutServiceCreateRequest) returns (PayoutServiceCreateResponse);
    // Creates a payout fund transfer.
    rpc Transfer(PayoutServiceTransferRequest) returns (PayoutServiceTransferResponse);
    // Retrieve payout details.
    rpc Get(PayoutServiceGetRequest) returns (PayoutServiceGetResponse);
    // Void a payout.
    rpc Void(PayoutServiceVoidRequest) returns (PayoutServiceVoidResponse);
    // Stage the payout.
    rpc Stage(PayoutServiceStageRequest) returns (PayoutServiceStageResponse);
    // Creates a link between the recipient and the payout.
    rpc CreateLink(PayoutServiceCreateLinkRequest) returns (PayoutServiceCreateLinkResponse);
    // Create payout recipient.
    rpc CreateRecipient(PayoutServiceCreateRecipientRequest) returns (PayoutServiceCreateRecipientResponse);
    // Enroll disburse account.
    rpc EnrollDisburseAccount(PayoutServiceEnrollDisburseAccountRequest) returns (PayoutServiceEnrollDisburseAccountResponse);
    // Check eligibility of a payout before initiating it (e.g. SEPA VoP / payee verification).
    rpc Eligibility(PayoutMethodEligibilityRequest) returns (PayoutMethodEligibilityResponse);
    }

Eight-row operations tables:

  • api-reference:
    | Operation | Description | Use When |
    |-----------|-------------|----------|
    | [`Create`](./create.md) | Initiate a new payout to transfer funds. Sets up the payout context and can sometimes execute the transfer immediately depending on the connector. | Starting a new disbursement to a vendor or user |
    | [`Transfer`](./transfer.md) | Execute the actual fund transfer for an existing payout. Moves funds to the destination payout method. | Confirming or executing a staged payout |
    | [`Get`](./get.md) | Retrieve current payout status from the processor. Enables synchronization between your system and the processor. | Polling for status updates on asynchronous payouts |
    | [`Void`](./void.md) | Cancel a pending payout. Stops the funds from leaving the merchant account if the payout hasn't been completed. | Cancelling an incorrect or unauthorized disbursement |
    | [`Stage`](./stage.md) | Prepare a payout for processing without executing it immediately. Allows for review and batching. | Reviewing payouts before final execution |
    | [`CreateLink`](./create-link.md) | Generate a secure URL for the recipient to provide their own payout method details to claim funds. | Sending funds via email without knowing bank details |
    | [`CreateRecipient`](./create-recipient.md) | Register a new recipient entity (individual or business) with the payment processor. | Onboarding a new seller or contractor |
    | [`EnrollDisburseAccount`](./enroll-disburse-account.md) | Register and verify a destination account (like a bank account) to receive disbursements. | Linking a vendor's bank account for future payouts |
  • node:
    | Operation | Description | Use When |
    |-----------|-------------|----------|
    | [`create`](./create.md) | Create a payout. Initiates fund transfer to recipient. | Sending money to a recipient |
    | [`transfer`](./transfer.md) | Create a payout fund transfer. Move funds between accounts. | Transferring between internal accounts |
    | [`get`](./get.md) | Retrieve payout details. Check status and tracking. | Monitoring payout progress |
    | [`void`](./void.md) | Cancel a pending payout. Stop before processing. | Aborting an incorrect payout |
    | [`stage`](./stage.md) | Stage a payout for later processing. Prepare without sending. | Delayed payouts, batch processing |
    | [`createLink`](./create-link.md) | Create link between recipient and payout. Associate payout with recipient. | Setting up recipient relationships |
    | [`createRecipient`](./create-recipient.md) | Create payout recipient. Store recipient bank/payment details. | First time paying a new recipient |
    | [`enrollDisburseAccount`](./enroll-disburse-account.md) | Enroll disburse account. Set up account for payouts. | Onboarding new payout accounts |
  • java, python and php READMEs are the same shape
  • nav:
    - [Payout Service Overview](api-reference/services/payout-service/README.md)
    - [Create](api-reference/services/payout-service/create.md)
    - [Transfer](api-reference/services/payout-service/transfer.md)
    - [Get](api-reference/services/payout-service/get.md)
    - [Void](api-reference/services/payout-service/void.md)
    - [Stage](api-reference/services/payout-service/stage.md)
    - [Create Link](api-reference/services/payout-service/create-link.md)
    - [Create Recipient](api-reference/services/payout-service/create-recipient.md)
    - [Enroll Disburse Account](api-reference/services/payout-service/enroll-disburse-account.md)

Since March, api-reference README has had 8 rows ... I'm not sure if it was checked against the proto, which has 9...

@nfarah86

nfarah86 commented Aug 13, 2026

Copy link
Copy Markdown

I also wanted to ask about the php client.. I'm having trouble understanding something.

I can't find the php client... sdk/ has java, javascript, python and rust and I couldn't find a composer.json......

but the php docs say composer require hyperswitch/prism.

I don't see that php has any entries in SUMMARY.md .... if you hit control +f, you see that PHP is not listed.

@manojradhakrishnan is this intentional? If you can help me better understand.... thank you!

@nfarah86

nfarah86 commented Aug 13, 2026

Copy link
Copy Markdown

Another thing I noticed is that some request fields have fewer rows than what is described in the proto file.

In the description, the CREATE shape is here in the payouts.proto file:

message PayoutServiceCreateRequest {
// Identification
optional string merchant_payout_id = 1; // this is the id passed to the payout processor
// Address Information
PayoutAddress address = 2;
// Metadata
optional SecretString connector_feature_data = 3;
// Payout Method Data
optional PayoutMethod payout_method_data = 4;
// Quote ID
optional string connector_quote_id = 5;
// Connector Payout ID
optional string connector_payout_id = 6;
// Amount Information
Money amount = 7; // contains amount and source_currency
// Currency in which payout will be received
Currency destination_currency = 8;
// Customer Details
optional Customer customer = 9;
// Priority of the Payout
optional PayoutEnums.PayoutPriority priority = 10;
// Connector Payout Method ID representing the Payout Method
optional string connector_payout_method_id = 11;
// Webhook URL
optional string webhook_url = 12;
// Browser Information
optional BrowserInformation browser_info = 13;
// access token
optional SecretString access_token = 14;
// Source Bank Data
optional SourceBankData source_bank_data = 15;
// Description of the payout
optional string description = 16;
}

... if you look at line 282, you see there's a description field.

The Request Fields, the 4th section in create.md file, it is missing the description field:

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `merchant_payout_id` | string | No | Your internal identifier passed to the payout processor. |
| `address` | PayoutAddress | Yes | The shipping and billing address associated with the payout. |
| `connector_feature_data` | SecretString | No | Connector-specific metadata or feature configurations. |
| `payout_method_data` | PayoutMethod | No | Specific details of the payout instrument (e.g., Card, ACH, Pix). |
| `connector_quote_id` | string | No | Pre-negotiated quote ID if applicable. |
| `connector_payout_id` | string | No | An existing payout identifier from the connector, if any. |
| `amount` | Money | Yes | The amount to be paid out along with the source currency. |
| `destination_currency` | Currency | Yes | The currency in which the recipient will receive the payout. |
| `customer` | Customer | No | Details about the customer receiving the payout. |
| `priority` | PayoutEnums.PayoutPriority | No | Priority of the payout (e.g., INSTANT, WIRE). |
| `connector_payout_method_id` | string | No | The connector's unique ID for a stored payout method. |
| `webhook_url` | string | No | URL where payout status updates should be sent. |
| `browser_info` | BrowserInformation | No | Information about the user's browser, used for fraud prevention. |
| `access_token` | SecretString | No | Access token for the connector, if required. |
| `source_bank_data` | SourceBankData | No | Details of the bank account from which the payout is funded. |

There is a discrepancy in what is in the proto file and what's in the create.md file.


Now, what's interesting is in the rules file:

## OP4: Request Fields Table
**Format:**
```markdown
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `field_name` | {proto_type} | Yes/No | {description} |
```
**Rules:**
- Include EVERY field from proto (no omissions)
- Use backticks around field names
- Match proto types exactly
- Include enum values in description: "Values: MANUAL, AUTOMATIC"
.

it says the rules are:

Rules:

  • Include EVERY field from proto (no omissions)
  • Use backticks around field names
  • Match proto types exactly
  • Include enum values in description: "Values: MANUAL, AUTOMATIC"

There are a few files that are missing different fields too.. I commented directly on the PR with the respective proto file to show the missing fields. Let me know how we should move forward with this.... I think what's in the proto file and what's in the .md file should line up... @manojradhakrishnan please let me know if this is what was intended, or if the intention was something else.

@nfarah86

Copy link
Copy Markdown

chatted with @Sakilmostak ... he'll push the updates to this PR, and I'll re-review it tomorrow.

Sakilmostak and others added 3 commits August 14, 2026 01:14
…fer docs

Reflect #2074 (surface vop response) in the Transfer operation docs:
- add connector_eligibility_reference_id (proto field 16) to the request
  fields across the canonical api-reference and the java/node/php/python
  SDK reference pages
- also add the previously-missing description field (proto field 15)

Co-Authored-By: Claude <noreply@anthropic.com>
Add the previously-undocumented Eligibility RPC (payout eligibility /
SEPA Verification of Payee pre-check) across the canonical API reference
and the java/node/python/php SDK references, plus nav entries.

- new canonical page: api-reference/services/payout-service/eligibility.md
- new SDK pages: sdks/{java,node,python,php}/payout-service/eligibility.md
- add Eligibility to service README operations tables and SUMMARY.md nav

Co-Authored-By: Claude <noreply@anthropic.com>
@Sakilmostak
Sakilmostak dismissed stale reviews from JeevaRamu0104 and themself via 3638a77 August 13, 2026 20:15
…eate-link

Fill the remaining field-completeness gaps where the canonical API
reference (and therefore the SDK pages) omitted proto fields:

- create: add description (proto field 16)
- get: add source_bank_data (proto field 4, Deutsche Bank debtor data)
- create-link: add description (field 15) and source_bank_data (field 16)

Co-Authored-By: Claude <noreply@anthropic.com>
@nfarah86

nfarah86 commented Aug 14, 2026

Copy link
Copy Markdown

PHP sdk is not supported, so we're going to remove the PHP references in a separate PR... PHP references are mentioned throughout PRISM, which isn't supported... I'll create a new PR to remove any PHP reference.

@JeevaRamu0104
JeevaRamu0104 disabled auto-merge August 14, 2026 15:09
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.

4 participants