Merchant & Identifiers
The merchant account
A merchant account is the root entity in AccruPay. All transactions, connected provider accounts, customers, and payment plans belong to a single merchant. Your API credentials are scoped to your merchant account.
Your identifiers vs AccruPay identifiers
AccruPay generates its own UUIDs for every resource. But for most operations, you also supply your own identifier — a string you control — so you can correlate AccruPay records with your own database without storing AccruPay IDs.
merchantInternalTransactionCode
Your transaction or order ID. A string you define.
const session = await sdk.transactions.clientSessions.payments.start({
merchantTransactionProviderId: process.env.ACCRUPAY_PROVIDER_ID,
data: {
merchantInternalTransactionCode: 'order-8821',
amount: 4999n,
currency: CURRENCY.USD,
// ...
},
});
This field is an idempotency key. If you call start() with a code you have used before, AccruPay returns the existing session rather than creating a new one. This makes it safe to retry a session-creation request after a network failure.
It also enables recovery. If you lose the session ID, you can verify by your own code:
const transaction = await sdk.transactions.clientSessions.payments.verify({
merchantInternalTransactionCode: 'order-8821',
});
And it is the primary reconciliation key: match AccruPay transactions to your database rows using the code you set.
Use your existing order ID or database primary key. Do not generate a separate ID just for AccruPay — keeping these in sync adds complexity with no benefit.
merchantInternalCustomerCode
Your customer ID. A string you define.
Passed via the customer field in session and transaction requests:
const session = await sdk.transactions.clientSessions.payments.start({
merchantTransactionProviderId: process.env.ACCRUPAY_PROVIDER_ID,
data: {
customer: {
merchantInternalCustomerCode: 'user-4412',
},
// ...
},
});
AccruPay creates a provider-side customer record the first time a session with this code is completed. Subsequent sessions with the same code reuse that customer record.
This identifier is required for stored payment methods and payment plans. Without a customer record, there is no entity to attach the payment method to.
Use your existing user ID or external customer identifier (for example, a CRM ID). This makes it trivial to look up stored payment methods and plans by customer without maintaining a separate mapping table.
merchantInternalPaymentPlanCode
The same pattern applies to payment plans. Supply your own plan identifier so you can correlate AccruPay plans to your subscription records:
data: {
merchantInternalPaymentPlanCode: 'sub-1099',
// ...
}
Connected provider accounts
Each payment provider you connect in the AccruPay dashboard gets its own UUID: the merchantTransactionProviderId. This is distinct from the transactionProvider enum (which identifies the provider type). The merchantTransactionProviderId identifies the specific account you connected.
You pass it when you need to select a specific provider account, for example when you have multiple accounts with the same provider:
data: {
merchantTransactionProviderId: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
// ...
}
Find this UUID in your AccruPay dashboard under connected providers.