Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
title: "Platform Configuration"
description: "Configuring credentials, webhooks and currencies for your platform global P2P payments"
---
import PlatformConfigAPI from '/snippets/platform-config-currency-api-webhooks.mdx';
import { topLevelProductName } from '/snippets/variables.mdx';

This guide explains how to configure your platform: get API credentials, configure webhooks, and set up UMA.

<PlatformConfigAPI />

Expand Down
31 changes: 19 additions & 12 deletions mintlify/global-p2p/onboarding-customers/configuring-customers.mdx
Original file line number Diff line number Diff line change
@@ -1,23 +1,18 @@
---
title: "Configuring Customers"
description: "Creating and managing customers in the Grid API"
description: "Creating and managing customers for global P2P payments"
---
import KycWebhooks from '/snippets/kyc/kyc-webhooks.mdx'
import CustomerTypes from '/snippets/creating-customers/customer-types.mdx'
import OnboardingModel from '/snippets/creating-customers/onboarding-model.mdx'
import KycRegulated from '/snippets/kyc/kyc-regulated.mdx'
import KycUnregulated from '/snippets/kyc/kyc-unregulated.mdx'

This guide provides comprehensive information about creating customers in the Grid API, including customer types, onboarding models, registration, and management.

## Onboarding model
<OnboardingModel />

There are two platform models for regulated and unregulated platforms.

- Regulated institutions: Use your existing compliance processes. Create individual and business customers directly via `POST /customers`. The information you supply is used for beneficiary/counterparty compliance screening.
- Unregulated institutions: Grid performs KYC/KYB. Generate a hosted KYC/KYB link, redirect your customer to complete verification in their locale, receive a KYC result webhook. While KYC is pending, allow customers to finish account setup but block funding and money movement.

## Customer Types

The Grid API supports both individual and business customers. While the API schema itself makes most Personally Identifiable Information (PII) optional at initial creation, specific fields may become mandatory based on the currencies the customer will transact with.

Your platform's configuration (retrieved via `GET /config`) includes a `supportedCurrencies` array. Each currency object within this array has a `providerRequiredCustomerFields` list. If a customer is intended to use a specific currency, any fields listed for that currency **must** be provided when creating or updating the customer.
<CustomerTypes />

The base required information for all customers is only:

Expand All @@ -26,6 +21,18 @@ The base required information for all customers is only:

If using sending and receiving to just-in-time UMA addresses, you'll also need to specify the bank account information

## Creating Customers

<AccordionGroup>
<Accordion title="Regulated Platforms" icon="">
<KycRegulated />
</Accordion>
<Accordion title="Unregulated Platforms" icon="">
<KycUnregulated />
</Accordion>
</AccordionGroup>


### Individual customers

In some cases, only the above fields are required at customer creation. Beyond those base requirements, additional fields commonly associated with individual customers include:
Expand Down
46 changes: 15 additions & 31 deletions mintlify/global-p2p/quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description: "Send your first cross-border payment"
---
import { remittanceProductName } from '/snippets/variables.mdx'

This quickstart guides you through a regulated FI sending an individual customer payment from the US to a bank account in Mexico using just-in-time funding.
With Global P2P you can send and receive payments in any supported fiat or crypto currency. This quickstart guides you through a regulated FI sending an individual customer payment from the US to a bank account in Mexico using USDC just-in-time funding. For examples funding with real time fiat rails, see the [Sending Payments](/global-p2p/sending-receiving-payments/sending-payments) guide.

## Understanding Entity Mapping for Remittances

Expand Down Expand Up @@ -130,8 +130,8 @@ In this guide, the entities map as follows:
-H "Content-Type: application/json" \
-d '{
"source": {
"umaAddress": "$alice@yourapp.example",
"currency": "USD"
"customerId": "Customer:019542f5-b3e7-1d02-0000-000000000001",
"currency": "USDC"
},
"destination": {
"accountId": "ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123",
Expand All @@ -151,36 +151,33 @@ In this guide, the entities map as follows:
"fees": { "amount": 50, "currency": { "code": "USD", "decimals": 2 } },
"paymentInstructions": [
{
"accountOrWalletInfo": {
"reference": "UMA-Q12345-REF",
"accountType": "US_ACCOUNT",
"accountNumber": "987654321",
"routingNumber": "123456789",
"accountCategory": "CHECKING",
"bankName": "Example Bank"
}
"accountOrWalletInfo": {
"accountType": "SOLANA_WALLET",
"address": "0x1234567890123456789012345678901234567890",
"assetType": "USDC"
}
},
{
"accountOrWalletInfo": {
"accountType": "SOLANA_WALLET",
"assetType": "USDC",
"address": "4Nd1m6Qkq7RfKuE5vQ9qP9Tn6H94Ueqb4xXHzsAbd8Wg"
}
"accountOrWalletInfo": {
"accountType": "BASE_WALLET",
"address": "0x1234567890123456789012345678901234567890",
"assetType": "USDC"
}
}
],
"status": "PENDING"
}
```
## Fund the quote (Sandbox simulation)
In production, you would trigger a real‑time push on a local instant rail (e.g., RTP, SPEI, SEPA Instant) to the provided `bankAccountInfo` using the exact `reference`. In Sandbox, you can mock funding using the simulate send endpoint.
In production, you would trigger a payment on one of the supported blockchains to the provided address. In Sandbox, you can mock funding using the simulate send endpoint.
Copy link
Contributor

Choose a reason for hiding this comment

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

Why are we doing stablecoin stuff for P2P?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Let me tweak this to highlight that you can use real-time payment or crypto rails, but the example focuses on crypto. It seems the zeitgeist is stablecoin settlements and trying to address that interest.

Copy link
Contributor

Choose a reason for hiding this comment

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

But this whole demo in particular is mostly around the sofi/umaaas use case, no?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It is the UMAaas flow but there are an increasing number of neobanks / eWallets offering USD denominated accounts where balances are actually USDC.

I've updated it to

With Global P2P you can send and receive payments in any supported fiat or crypto currency. This quickstart guides you through a regulated FI sending an individual customer payment from the US to a bank account in Mexico using USDC just-in-time funding. For an example funding with real time fiat rails, see the Sending Payments guide.


```bash
curl -sS -X POST "https://api.lightspark.com/grid/2025-10-13/sandbox/send" \
-u "$GRID_CLIENT_ID:$GRID_API_SECRET" \
-H "Content-Type: application/json" \
-d '{
"reference": "UMA-Q12345-REF",
"currencyCode": "USD",
"currencyCode": "USDC",
"currencyAmount": 10000
}'
```
Expand Down Expand Up @@ -208,19 +205,6 @@ In this guide, the entities map as follows:
"receivedAmount": { "amount": 9706, "currency": { "code": "MXN", "decimals": 2 } },
"customerId": "Customer:019542f5-b3e7-1d02-0000-000000000001",
"quoteId": "Quote:019542f5-b3e7-1d02-0000-000000000006",
"paymentInstructions": [
{
"instructionsNotes": "Include reference code in transfer memo",
"accountOrWalletInfo": {
"accountType": "US_ACCOUNT",
"accountNumber": "1234567890",
"routingNumber": "021000021",
"bankName": "Chase Bank",
"referenceCode": "REF123456"
}
},
]
}
},
"timestamp": "2025-01-15T14:32:00Z",
"webhookId": "Webhook:019542f5-b3e7-1d02-0000-000000000007",
Expand Down
28 changes: 7 additions & 21 deletions mintlify/openapi.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 24 additions & 4 deletions mintlify/payouts-and-b2b/onboarding/configuring-customers.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,37 @@ You can retrieve customer information using either the Grid-assigned customer ID
<CodeGroup>
```bash Grid-assigned customer ID
curl -X GET "https://api.lightspark.com/grid/2025-10-13/customers/{customerId}" \
-H "Authorization: Basic $GRID_CLIENT_ID:$GRID_CLIENT_SECRET"
-u "$GRID_CLIENT_ID:$GRID_CLIENT_SECRET"
```

```bash List customers with a filter
curl -X GET "https://api.lightspark.com/grid/2025-10-13/customers?platformCustomerId={platformCustomerId}&customerType={customerType}&createdAfter={createdAfter}&createdBefore={createdBefore}&cursor={cursor}&limit={limit}" \
-H "Authorization: Basic $GRID_CLIENT_ID:$GRID_CLIENT_SECRET"
-u "$GRID_CLIENT_ID:$GRID_CLIENT_SECRET"
```
</CodeGroup>

Note that this example shows all available filters. You can use any combination of them.

### Updating Customer Information

To update customer information:

```bash
curl -X PATCH "https://api.lightspark.com/grid/2025-10-13/customers/{customerId}" \
-u "$GRID_CLIENT_ID:$GRID_CLIENT_SECRET" \
-H "Content-Type: application/json" \
-d '{
"bankAccountInfo": {
"accountType": "US_ACCOUNT",
"accountNumber": "123456789",
"routingNumber": "987654321",
"bankName": "Chase Bank"
}
}'
```

Note that not all customer information can be updated. Particularly for non-regulated platforms, you cannot update personal information after the customer has been created.

## Bank Account Information

The API supports various bank account formats based on country and funding type. There are two types of funding
Expand Down Expand Up @@ -183,7 +203,7 @@ For large-scale customer imports, you can upload a CSV file containing customer

```bash
curl -X POST "https://api.lightspark.com/grid/2025-10-13/customers/bulk/csv" \
-H "Authorization: Basic $GRID_CLIENT_ID:$GRID_CLIENT_SECRET" \
-u "$GRID_CLIENT_ID:$GRID_CLIENT_SECRET" \
-F "file=@customers.csv"
```

Expand Down Expand Up @@ -212,7 +232,7 @@ You can track the job status through:

```bash
curl -X GET "https://api.lightspark.com/grid/2025-10-13/customers/bulk/jobs/{jobId}" \
-H "Authorization: Basic $GRID_CLIENT_ID:$GRID_CLIENT_SECRET"
-u "$GRID_CLIENT_ID:$GRID_CLIENT_SECRET"
```

Example job status response:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Platform Configuration"
description: "Configuring platform settings for global payouts"
description: "Configuring credentials, webhooks and currencies for your platform"
---
import PlatformConfigAPI from '/snippets/platform-config-currency-api-webhooks.mdx';

Expand Down
31 changes: 16 additions & 15 deletions mintlify/payouts-and-b2b/quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,18 @@ In this guide, the entities map as follows:
**Flow**: Your customer (a business) funds their internal account → uses your platform to send payments → to their vendors' external bank accounts.

## Get API credentials
Create Sandbox API credentials in the dashboard, then set environment variables for local use.
Create Sandbox API credentials in the dashboard, then set environment variables for local use.

```bash
export GRID_BASE_URL="https://api.lightspark.com/grid/2025-10-13"
export GRID_CLIENT_ID="YOUR_SANDBOX_CLIENT_ID"
export GRID_CLIENT_SECRET="YOUR_SANDBOX_CLIENT_SECRET"
```

<Tip>
Use Basic Auth in cURL with `-u "$GRID_CLIENT_ID:$GRID_API_SECRET"`.
</Tip>
```bash
export GRID_BASE_URL="https://api.lightspark.com/grid/2025-10-13"
export GRID_CLIENT_ID="YOUR_SANDBOX_CLIENT_ID"
export GRID_CLIENT_SECRET="YOUR_SANDBOX_CLIENT_SECRET"
```

<Tip>
Use Basic Auth in cURL with `-u "$GRID_CLIENT_ID:$GRID_API_SECRET"`.
</Tip>

## Onboard a Customer
Onboard a customer using the hosted KYC/KYB link flow.
Expand All @@ -43,7 +44,7 @@ Onboard a customer using the hosted KYC/KYB link flow.
</Note>
```bash
curl -X GET "https://api.lightspark.com/grid/2025-10-13/customers/kyc-link?redirectUri=https://yourapp.com/onboarding-complete&platformCustomerId=019542f5-b3e7-1d02-0000-000000000001" \
-H "Authorization: Basic $GRID_CLIENT_ID:$GRID_CLIENT_SECRET"
-u "$GRID_CLIENT_ID:$GRID_CLIENT_SECRET"
```
**Response:**

Expand Down Expand Up @@ -86,7 +87,7 @@ Once the customer is created, internal accounts will automatically be created on

```bash
curl -X GET "https://api.lightspark.com/grid/2025-10-13/internal-account?customerId=Customer:019542f5-b3e7-1d02-0000-000000000001&currency=USD" \
-H "Authorization: Basic $GRID_CLIENT_ID:$GRID_CLIENT_SECRET"
-u "$GRID_CLIENT_ID:$GRID_CLIENT_SECRET"
```

**Response:**
Expand Down Expand Up @@ -148,7 +149,7 @@ making sure to include the reference code `FUND-ABC123` in the transfer memo if
```bash
# Sandbox: fund internal account directly
curl -X POST "https://api.lightspark.com/grid/2025-10-13/sandbox/internal-accounts/InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965/fund" \
-H "Authorization: Basic $GRID_CLIENT_ID:$GRID_CLIENT_SECRET" \
-u "$GRID_CLIENT_ID:$GRID_CLIENT_SECRET" \
-H "Content-Type: application/json" \
-d '{
"currencyCode": "USD",
Expand Down Expand Up @@ -194,7 +195,7 @@ Mexican CLABE account as the external account.

```bash
curl -X POST "https://api.lightspark.com/grid/2025-10-13/customers/external-accounts" \
-H "Authorization: Basic $GRID_CLIENT_ID:$GRID_CLIENT_SECRET" \
-u "$GRID_CLIENT_ID:$GRID_CLIENT_SECRET" \
-H "Content-Type: application/json" \
-d '{
"customerId": "Customer:019542f5-b3e7-1d02-0000-000000000001",
Expand Down Expand Up @@ -254,7 +255,7 @@ Create a quote to lock in the exchange rate, fees, and get the transfer details

```bash
curl -X POST "https://api.lightspark.com/grid/2025-10-13/quotes" \
-H "Authorization: Basic $GRID_CLIENT_ID:$GRID_CLIENT_SECRET" \
-u "$GRID_CLIENT_ID:$GRID_CLIENT_SECRET" \
-H "Content-Type: application/json" \
-d '{
"lookupId": "LookupRequest:019542f5-b3e7-1d02-0000-000000000009", # ID from the lookup step
Expand Down Expand Up @@ -328,7 +329,7 @@ Execute the quote to initiate the transfer from the internal account to the exte

```bash
curl -X POST "https://api.lightspark.com/grid/2025-10-13/quotes/Quote:019542f5-b3e7-1d02-0000-000000000006/execute" \
-H "Authorization: Basic $GRID_CLIENT_ID:$GRID_CLIENT_SECRET"
-u "$GRID_CLIENT_ID:$GRID_CLIENT_SECRET"
```

**Response:**
Expand Down
5 changes: 5 additions & 0 deletions mintlify/snippets/creating-customers/customer-types.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
## Customer Types

The Grid API supports both individual and business customers. While the API schema itself makes most Personally Identifiable Information (PII) optional at initial creation, specific fields may become mandatory based on the currencies the customer will transact with.

Your platform’s configuration ( retrieved via `GET /config`) includes a supportedCurrencies array. Each currency object within this array has a providerRequiredCustomerFields list. If a customer is intended to use a specific currency, any fields listed for that currency must be provided when creating or updating the customer.
6 changes: 6 additions & 0 deletions mintlify/snippets/creating-customers/onboarding-model.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
## Onboarding model

There are two models for regulated and unregulated platforms.

- Regulated platforms: Use your existing compliance processes. Create individual and business customers directly via `POST /customers`. The information you supply is used for beneficiary/counterparty compliance screening.
- Unregulated platforms: Grid performs KYC/KYB. Generate a hosted KYC/KYB link, redirect your customer to complete verification in their locale, receive a KYC result webhook. While KYC is pending, allow customers to finish account setup but block funding and money movement.
Loading