For the complete documentation index, see llms.txt. Any page on this site can be fetched as Markdown by appending .md to its URL.

boltMeridian

Connect your Meridian accounts system so workflows and AI agents can look up member accounts, balances, outages, and payment arrangements.

The Meridian integration is being rolled out. If you don't see Meridian when you add an integration, it isn't on for your organization yet.

The Meridian integration connects Tandem to your co-op's Meridian Consumer Accounts API. Five workflow nodes and one AI agent tool read and write member account data through it: find an account, read a balance, check for an outage, report one, and check whether an account can set up a payment arrangement.

Taking a card payment is a separate integration, Meridian Payments. See Taking a payment.

Setup

An organization can have several Meridian integrations, such as one for sandbox and one for production.

1. Get your details from Meridian

Meridian issues these. Tandem does not generate any of them:

  • Accounts API URL and Payment gateway URL, one pair per environment.
  • Client ID and Application ID.
  • API token, which starts with LT:.

Meridian only accepts calls from allowlisted addresses. Contact Tandem support for the addresses to give Meridian.

2. Connect it in Tandem

On the Integrations page, click Add Integration, choose Meridian under Contact Center, and fill in the form:

FieldWhat to enter
NameA label for this connection, such as Co-op (production).
EnvironmentSandbox or Production. Defaults to Sandbox.
Accounts API URLThe https:// address of the Consumer Accounts API. Leave /api off the end.
Payment gateway URLThe https:// address of the payment gateway. Used to quote a convenience fee.
Client ID1 to 20 letters or digits.
Application ID1 to 10 digits.
API tokenThe token from Meridian. A leading Bearer or LT: is removed for you, so either may be pasted.

Both URLs must be public https:// addresses. A trailing slash is dropped. Addresses that resolve to a private or internal network are refused, both when you save and when a request is sent.

Saving does not contact Meridian. Use Test Connection to check the connection.

3. Test the connection

Open the integration and click Test Connection. Tandem calls Meridian's health check, then makes an authenticated call that lists Meridian's lookup tables. It tests the token that is stored, so save a new token before you test it.

ResultWhat it means
Connection successfulMeridian is up and accepted the token.
Meridian rejected the tokenMeridian answered 401 or 403. The token is wrong, expired, or revoked.
Meridian health check failedMeridian's health check answered something other than 200.
Meridian has no accounts API at that address. Check the Accounts API URL, and leave /api off the end.The health check answered, but the accounts API did not. Remove a trailing /api from Accounts API URL.
Could not reach MeridianThe address did not answer. Check the URL, and that Meridian has allowlisted Tandem's addresses.

Updating or removing the connection

  • Update it. Open the integration and change any field. Tandem never shows the saved token again. Leave API token blank to keep the stored one. Changing either URL requires entering the token again.
  • Delete it. This removes the stored token. Nodes and agent tools that point at it can no longer reach Meridian, so pick another integration in them first.

Workflow nodes

The five nodes appear in the Node Library once the integration is on for your organization. Each one has a Meridian Integration field that lists your Meridian integrations, and a Variable Prefix that names the variables it writes: with the prefix account, a result called balance is saved as account_balance.

Account Number has spaces and dashes removed, so 221-390 000 is sent as 221390000. Anything that is not then 1 to 19 digits takes invalidInput. An Account Number search in Find Meridian Account works the same way.

Every node also has two exits that come from the platform. invalidInput is taken when a required field is empty after variable substitution or a value is invalid. fallback is taken when Meridian rejects the saved credentials, cannot be reached, rejects the request as invalid, or returns any other error. The message names the cause, such as Meridian rejected the saved credentials. Update them on the Integrations page.

Find Meridian Account

Searches for member accounts.

FieldWhat it does
Search ByPhone Number (the default), Account Number, Member Number, Meter Number, or Zip and Street Number.
ValueWhat to search for. Supports $(variable). For a phone search, blank uses the caller's number.
Zip, Street NumberThe service address. Shown, and both required, for Zip and Street Number.
Variable PrefixPrefix for the result variables.

A phone number is reduced to digits. An 11-digit number that starts with 1 loses the 1. A phone search with no Value and no caller number takes invalidInput.

ExitWhen
foundExactly one account matches.
multipleSeveral accounts match.
notFoundNo account matches.

On multiple, do not treat the first match as the caller's account. Ask which one they mean. One phone number can belong to several households.

Variables, for found and multiple: <prefix>_count, <prefix>_accounts, and the first match's <prefix>_accountNumber, <prefix>_memberNumber, <prefix>_firstName, <prefix>_lastName, <prefix>_isPrepaid, <prefix>_isDisconnected, and <prefix>_onCutOffList. <prefix>_accounts is a list of at most 10 accounts. Each holds accountNumber, accountType, accountStatus, serviceStreet, and serviceCity, with no names or member numbers for the other matches. On notFound only <prefix>_count and <prefix>_accounts are saved.

Get Meridian Account

Reads one account.

FieldWhat it does
Account NumberThe account to read. Supports $(variable), so it can come from Find Meridian Account.
Payment AmountOptional, such as 100.00. When set, Meridian quotes the convenience fee for that payment.
Variable PrefixPrefix for the result variables.
ExitWhen
defaultThe account was read.
notFoundMeridian has no such account.

Variables: <prefix>_accountNumber, _balance, _pastDueAmount, _minimumPaymentAmount, _lastBillDate, _lastPaymentAmount, _isDisconnected, _canUseCreditCards, _hasArrangement, _onCutOffList, _isPrepaid, and _convenienceFee. Money values are decimal strings such as 268.57. _convenienceFee is an empty string when you set no Payment Amount, when the account cannot pay by card, when Meridian returns no payment token for it, or when the fee lookup fails.

Get Meridian Outages

Checks an account for outages.

FieldWhat it does
Account NumberThe account to check. Supports $(variable).
Include Resolved OutagesOff by default, which returns active outages only. On returns both.
Variable PrefixPrefix for the result variables.
ExitWhen
hasOutageAt least one outage is returned.
noOutageNone is returned.

Variables: <prefix>_count, and for the first outage <prefix>_status, <prefix>_description, and <prefix>_estimatedRestoration. With no outage only the count is saved.

Report Meridian Outage

Reports an outage for an account.

FieldWhat it does
Account NumberThe account to report for. Supports $(variable).
ReasonA reason code from the list configured in Meridian. Leave blank to send none.
NoteFree text for the crew, up to 500 characters.
Request CallbackAsk the co-op to call the member back.
Callback Phone NumberShown when Request Callback is on. Blank uses the caller's number.
Variable PrefixPrefix for the result variable.

With Request Callback on and no number from either place, the node takes invalidInput. So does a Note over 500 characters, or a Reason that is not numeric.

ExitWhen
defaultThe outage was reported.

Variable: <prefix>_reported, set to true. If Meridian rejects the report, the node takes fallback.

Check Meridian Arrangement

Asks whether an account can set up a payment arrangement.

FieldWhat it does
Account NumberThe account to check. Supports $(variable).
Variable PrefixPrefix for the result variable.
ExitWhen
eligibleThe account can set up a payment arrangement.
notEligibleIt cannot.

Variable: <prefix>_eligible, true or false.

AI agent tool

An AI agent can call Meridian directly. On the agent's Custom Tools row, add a tool, pick Integration as the kind, and choose your Meridian integration from the target list, where it appears under a Meridian heading. Then set:

  • Action, one of the five below.
  • Name and Description, which tell the model what the tool is and when to use it.
  • Require caller verification, on by default.

There is no method, path, or parameter list. The action decides what the model may send.

ActionWhat the model suppliesWhat comes back
Find AccountsearchBy, and value, or zip and streetNumbercount and up to 10 accounts, each with accountNumber, accountType, accountStatus, serviceStreet, serviceCity.
Get AccountaccountNumber, optionally paymentAmountThe account fields listed under Get Meridian Account, with convenienceFee only when a paymentAmount was quoted.
Get OutagesaccountNumbercount and the active outages.
Report OutageaccountNumber, optionally note and shouldCallbackreported: true.
Check Arrangement EligibilityaccountNumbereligible.

Find Account returns less than the Find Meridian Account node: no names, member numbers, or status flags. A phone search can match several households, and the model can ask which address without reading out anyone else's details. With Require caller verification on, only a phone search on the number the caller is calling from returns the addresses. Every other search (account, member, or meter number, address, or a phone number the model supplies that is not the caller's) returns count and each account's accountNumber only. The tool's description tells the model so.

A callback on Report Outage goes to the number the caller is calling from. The model cannot supply a number. In a chat there is no caller number, so a callback request comes back as an error and the model reports the outage without one.

Caller verification

With Require caller verification on, every action except Find Account is refused until the caller has been verified for that account in the same conversation. The refusal comes back to the model as Verify the caller for this account before using this tool. A verification is kept for the rest of the conversation, including later turns, but only for the account it was recorded for and only for the Meridian integration it was recorded against.

Find Account is never refused. With the switch on, it returns account numbers only unless it searched by the caller's own number.

Nothing verifies callers yet. There is no action or node that records a verification, so a tool with Require caller verification on can only find accounts. Get Account, Get Outages, Report Outage, and Check Arrangement Eligibility are refused every time. To use them now, turn the switch off for that tool. Then the model can read balances and report outages for any account number it is given, so do that only where your own prompt and workflow establish who the caller is.

Account details come back to the model, so write the tool's Description and the agent's instructions to say what it may read out. See Add an integration tool for how tools are added.

Taking a payment

A workflow takes a card payment against a Meridian account with the Capture Payment Information node. The caller keys the card on the phone keypad, and Tandem charges it through Meridian's payment gateway. The card number, expiry, and security code never reach the workflow, its variables, or the transcript. An AI agent cannot take a payment itself: hand the call to a workflow that contains the node. Recording, the keypad entry, and the prompts work as described for Authorize.net.

Set up Meridian Payments

Meridian Payments is its own integration, separate from Meridian above. It appears in Add Integration only when Meridian is on for your organization. Fill in the same details Meridian issued for the accounts integration:

FieldWhat to enter
NameA label for this connection, such as Co-op payments (production).
DescriptionOptional.
EnvironmentSandbox or Production. Defaults to Sandbox.
Accounts API URLThe https:// address of the Consumer Accounts API.
Payment gateway URLThe https:// address of the payment gateway.
Client IDFrom Meridian.
Application IDFrom Meridian.
Credit card merchant IDOptional. Digits only.
Bank numberOptional. Digits only.
API tokenThe token from Meridian. A leading Bearer or LT: is removed for you. Enter it again when you change a URL.

Tandem uses the token to look up the account's payment token at the moment of each charge, then posts the sale to the payment gateway. Saving does not contact Meridian, so the first charge is the first test. Use a Sandbox integration first.

Configure the node

Add a Capture Payment Information node and pick your Meridian Payments integration under Payment Integration. Meridian needs four things the node otherwise treats as optional:

  • Transaction Type must be authCapture. Meridian takes a sale only.
  • Customer Account Number: the member account to apply the payment to, digits only, up to 19. It can be a $(variable), such as the account number from Find Meridian Account.
  • Convenience Fee: a decimal such as 2.50, with no currency symbol. It can be a $(variable).
  • Capture CVV and Capture Billing ZIP must both be on, each with its prompt. Meridian requires the security code and the billing ZIP on every charge.

Amount is the bill amount, a decimal such as 10.00. Name on Card is optional, up to 50 characters. Invoice Reference and Description are not sent to Meridian.

If any of these is missing, the node takes fallback before the caller is asked for anything, and the message names the problem: Meridian requires the billing ZIP; turn on Capture Billing ZIP, Meridian requires the CVV; turn on Capture CVV, Meridian requires the customer account number (up to 19 digits), Meridian requires the convenience fee as a decimal amount, or Meridian supports sale only; set Transaction Type to authCapture.

Tell the caller the fee first

Tandem sends the Convenience Fee to Meridian as a separate amount. It does not calculate the fee and does not play it. Get the fee from Get Meridian Account: set its Payment Amount, read <prefix>_convenienceFee, play it to the caller, and ask them to agree before the Capture Payment Information node. Pass the same value into Convenience Fee.

Result variables and exits

The node writes the same variables and takes the same exits as the Authorize.net node. See its result variables. With a prefix of pay, the Meridian values are:

VariableValue
pay_resultapproved, declined, invalidInput, or error.
pay_transIdMeridian's tracking ID for the payment.
pay_authCodeThe authorization code.
pay_last4The last four digits of the card.
pay_brandThe card type Meridian reports, or the type Tandem detected from the number.
pay_messageMeridian's status message, or Tandem's when the charge failed.
pay_outcomeUnknowntrue when the card may have been charged despite an error result.

pay_avsResult is empty for Meridian. The profile variables are empty too, because Meridian does not store the card.

ExitWhen
defaultMeridian approved the payment.
declinedMeridian declined it, the account was not found (Meridian account not found), or the account cannot pay by card (This account cannot pay by card).
invalidInputThe caller did not key a complete entry, or Meridian rejected what the caller keyed, such as the card number, expiry, security code, or ZIP.
fallbackAnything else, including a charge whose outcome is unknown.

When the outcome is unknown

If a sale times out, the connection drops, or Meridian answers with a server error or a response Tandem cannot read, Tandem sends the sale again, up to three times in all and within 25 seconds, under the same reference ID, so a repeat of the same sale is recognizable to Meridian. If it still has no answer, pay_outcomeUnknown is true, pay_result is error, and pay_message is one of the messages below. The same applies when Meridian rejects the sale after one of those attempts, a decline included: the rejection may be about the earlier attempt's own charge, so Tandem cannot tell whether the card was charged.

  • Gateway timed out; the charge may have been captured
  • Gateway connection dropped; the charge may have been captured
  • Gateway response unreadable; the charge may have been captured
  • Gateway server error; the charge may have been captured

Do not charge the card again from fallback when pay_outcomeUnknown is true. The first charge may have gone through. Check the payment with Meridian first.

Payment errors

What you see in _messageWhat it means
Meridian payments are not enabled in this environmentCard payments through Meridian are not turned on here yet. Contact Tandem support.
The Meridian gateway host is not on this environment's allowlistThe Payment gateway URL is not one Tandem is allowed to send charges to. Contact Tandem support.
Meridian account lookup failedThe account lookup did not succeed. Check the Accounts API URL and the token.
Meridian returned no payment token for this accountMeridian has no payment token for the account, so it cannot take a card payment.
Meridian rejected the payment tokenMeridian refused the account's payment token, and either a fresh one was refused too or too little of the 25 seconds was left to fetch a fresh one and send the sale again.
Meridian refused the payment token for this accountMeridian answered 403 for this account.
Gateway request failedThe sale could not be sent. On the first attempt nothing was charged. After an earlier attempt that may have charged, the result is one of the unknown-outcome messages above instead.
Payment declinedMeridian declined the payment and gave no message. The node takes declined.
The gateway rejected the card detailsMeridian rejected what the caller keyed and gave no message. The node takes invalidInput.
Meridian's own error message, or Meridian rejected the saleMeridian rejected the sale for a reason Tandem does not classify, and gave no message in the second case.

Troubleshooting

What you seeWhat it means
Meridian rejected the saved credentials. Update them on the Integrations page.A node took fallback because Meridian answered 401 or 403. The token expired or was revoked. Enter a new one.
Could not reach MeridianA node took fallback because the request failed. Check Meridian's status and the URLs, and that Meridian has allowlisted Tandem's addresses.
Requests to private/internal addresses are not allowedA URL resolves to a private network. A node takes fallback with this message. Use the public address Meridian gave you.
Meridian does not have that recordNo account has that number. Find Meridian Account and Get Meridian Account take notFound. The other nodes take fallback with Meridian found no match: ....
Find Meridian Account takes multipleThe search matched several accounts. Ask the caller which one, then search again by account number.
Verify the caller for this account before using this tool.The agent tool has Require caller verification on, and no verification exists. See Caller verification.
A node takes invalidInput with Account Number must be 1 to 19 digitsThe value had something other than digits, spaces, and dashes, or more than 19 digits.
A tool reports accountNumber must be 1 to 19 digitsThe model passed something other than an account number. Say in the description that it takes digits only.
Adding the integration is refused as forbiddenThe integration is not turned on for this environment yet.

On this page