Skip to content

Conversation

@michaelbjordanz
Copy link

No description provided.

Copilot AI review requested due to automatic review settings August 2, 2025 14:45
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR updates Medium's community rules document with significant restructuring and policy clarifications. The changes reorganize content presentation, add new policy details, and remove some specific restrictions while clarifying others.

  • Restructures the document format from bullet points to numbered sections with clearer headings
  • Adds new reporting mechanisms and user interaction tools (block/mute features)
  • Updates and clarifies various policy sections including harassment, privacy, spam, and cryptocurrency rules
Comments suppressed due to low confidence (2)

Rules.md:48

  • [nitpick] The term 'non-public data' is vague and redundant. Consider using more specific language like 'private data' or 'confidential data' to be consistent with the rest of the sentence.
Content that violates others’ privacy or personal safety, including sensitive or confidential information such as credit card numbers, social security numbers, non-public phone numbers, physical addresses, email addresses, non-public data, or other similar information

Rules.md:117

  • This sentence is overly complex and contains redundant phrasing ('offsite third-party outside of Medium' and 'offsite outside of Medium'). Consider breaking it into two clearer sentences or simplifying the language.
If your content includes a form that sends user information to you or a third-party, immediately next to or within the form you must disclose that the form will send the user’s information to an offsite third-party outside of Medium that is subject to that offsite third-party’s Terms of Use and Privacy Policy, or offsite outside of Medium, to you directly.

@michaelbjordanz michaelbjordanz changed the title Cultcrave.lambp Cultcrave.lambo Jan 20, 2026
Copy link
Author

@michaelbjordanz michaelbjordanz left a comment

Choose a reason for hiding this comment

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

{
    "openapi": "3.0.2",
    "info": {
        "description": "Moov is a platform that enables developers to integrate all aspects of money movement with ease and speed. The Moov API makes it simple for platforms to send, receive, and store money. Our API is based upon REST principles, returns JSON responses, and uses standard HTTP response codes. To learn more about how Moov works at a high level, read our concepts guide.\n",
        "title": "Moov API"
    },
    "servers": [
        {
            "url": "https://api.moov.io",
            "description": "Production"
        }
    ],
    "tags": [
        {
            "name": "API authentication",
            "description": "For server-to-server communication, use your API key's public key and secret key with Basic authentication. When using Basic authentication, you don't need to send a scope.\n\nSet the Authorization header to Basic <credentials> where credentials is the Base64 encoding of public key and private key joined by a single colon :.\n"
        },
        {
            "name": "Access token",
            "description": "When making requests to Moov from a browser, you can use OAuth with JSON Web Tokens (JWT).\n\nOur authentication flow follows the OAuth 2.0 standard. With this endpoint, you'll create an access token that you will pass along with API requests or when initializing Moov.js. To generate an authentication token, you’ll need to specify scopes that enable the token to use a specific set of API endpoints.

If a scope is required, it will be listed in the description of the endpoint.\n"
        },
        {
            "name": "Accounts",
            "description": "Accounts represent a legal entity (either a business or an individual) in Moov. You can create an account for yourself or set up accounts for others, requesting different capabilities depending on what you need to be able to do with that account. You can retrieve an account to get details on the business or individual account holder, such as an email address or employer identification number (EIN).\n\nBased on the type of account and its requested capabilities, we have certain verification requirements. To see what capabilities that account has, you can use the GET capability endpoint.\n\nWhen you sign up for the Moov Dashboard, you will have a facilitator account which can be used to facilitate money movement between other accounts. A facilitator account will not show up in your list of accounts and cannot be created via API. To update your facilitator account information, use the settings page of the Moov Dashboard.\n\nYou can disconnect an account within the account's settings in the Moov Dashboard. This action cannot be undone. When an account is disconnected, the account's history and wallet is retained, but transfers cannot be submitted, and no actions can be taken on the account. See the Dashboard guide for more information. It is not possible to permanently delete an account.\n"
        },
        {
            "name": "Analytics",
            "description": "You can retrieve helpful at-a-glance information about your account by getting metrics on categories such as new accounts, transfer counts, and transfer volume over different time periods.\n"
        },
        {
            "name": "Apple Pay",
            "description": "Apple Pay offers a fast, easy, and secure way to accept card payments. The use of Apple Pay requires adherence to Apple's guidelines and server requirements. See our step-by-step Apple Pay guide for more information.\n"
        },
        {
            "name": "Avatars",
            "description": "You can retrieve an account's profile image. This is especially useful if you'd like to use the profile image for a corresponding account in your own product.\n"
        },
        {
            "name": "Bank accounts",
            "description": "To transfer money with Moov, you’ll need to link a bank account to your Moov account, then verify that account. You can link a bank account to a Moov account by providing the bank account number, routing number, and Moov account ID.\n\nWe require micro-deposit verification to reduce the risk of fraud or unauthorized activity. You can verify a bank account by initiating micro-deposits, sending two small credit transfers to the bank account you want to confirm. Note that there is no way to initiate a micro-deposit from your bank of choice.\n\nYou can simulate bank account payment methods in test mode. See our test mode guide for more information.\n\nAlternatively, you can link and verify a bank account in one step through an instant account verification token from a third party provider like Plaid or MX. Bank accounts can have the following statuses: new, pending, verified, verificationFailed, errored. Learn more by reading our guide on bank accounts.\n"
        },
        {
            "name": "Capabilities",
            "description": "Capabilities determine what a Moov account can do. Each capability has specific requirements, depending on risk and compliance standards associated with different account activities. For example, there are more information requirements for a business that wants to charge other accounts than for an individual who simply wants to receive funds.\n\nWhen you request a capability, we list the information requirements for that capability. Once you submit the required information, we need to verify the data. Because of this, a requested capability may not immediately become active. Note, if an account requests and is approved for send-funds or collect-funds, the wallet capability is automatically enabled as well. For more detailed information on capabilities and capability IDs, read our capabilities guide.\n"
        },
        {
            "name": "Card issuing",
            "x-displayName": "Cards",
            "description": "A Moov wallet can serve as a funding source for issuing virtual cards. Note that we currently only issue Visa cards. Virtual cards can then be used to spend funds from the wallet.\n\n The card-issuing and wallet capabilities are required to be enabled before any card issuing functionality is available. Moov is in a private beta with select customers for card issuing.\n"
        },
        {
            "name": "Cards",
            "description": "You can link credit or debit cards to Moov accounts. You can use a card as a source for making transfers, which charges the card. To link a card to a Moov account and avoid some of the burden of PCI compliance, use the card link Moov Drop. You cannot add a card via the Dashboard. If you're linking a card via API, you must provide Moov with a copy of your PCI attestation of compliance. When testing cards, use the designated card numbers for test mode. You must contact Moov before going live in production with cards. Read our guide on cards for more information."
        },
        {
            "name": "Disputes",
            "description": "A dispute is a situation where a cardholder formally questions a transaction on their account with their card issuer. This could be for a number of reasons ranging from billing errors to fraudulent activity or dissatisfactory goods/services. If the dispute is recognized as legitimate, the issuer will reverse the payment (otherwise known as a chargeback).\n\nYou can simulate disputes, including winning or losing a dispute, in test mode. See our test mode guide for more information.\n"
        },
        {
            "name": "End to End Encryption",
            "description": "Allows for the passing of secure authentication data through an unverified proxies.\n"
        },
        {
            "name": "Enriched address",
            "description": "Search for valid addresses using a partial or full address.\n"
        },
        {
            "name": "Enriched profile",
            "description": "By supplying an email address, you can retrieve a profile with enriched data fields. This service is offered in collaboration with Clearbit.\n"
        },
        {
            "name": "Fee Plans",
            "description": "Moov offers multiple fee plans. You can view the fee plans available to your account, and assign them to your connected accounts.\n"
        },
        {
            "name": "Files",
            "description": "Files can be used for a multitude of different use cases including but not limited to, individual identity verification and business underwriting. You may need to provide documentation to enable capabilities or to keep capabilities enabled for an account. The maximum file size is 10MB. Each account is allowed a maximum of 50 files. Acceptable file types include csv, jpg, pdf, and png. To learn about uploading files in the Moov Dashboard, read our file upload guide.\n"
        },
        {
            "name": "Industries",
            "description": "Information about industries and their merchant codes.\n"
        },
        {
            "name": "Institutions",
            "description": "Lookup ACH and wire participating financial institutions. We recommend using this endpoint when an end-user enters a routing number to confirm their bank or credit union.\n"
        },
        {
            "name": "Money movement",
            "description": "Transfer allow you Moov money\n"
        },
        {
            "name": "Onboarding",
            "description": "Coming soon - Invite organizations to onboard with Moov. Create an invitation containing a unique link that allows the recipient to provide data necessary to fulfill capability requirements, agree to pricing, and accept Moov's terms. \n\nYou can create and send an onboarding link directly from the Moov Dashboard. See our documentation for details.\n"
        },
        {
            "name": "Payment methods",
            "description": "Payment methods represent all of the ways an account can move funds to another Moov account. Payment methods are generated programmatically when a card or bank account is added or the status is updated e.g., ach-debit-fund will be added as a payment method once the bank account is verified.\n\nRTP® and Push to Card are not yet generally available on Moov. Contact us for more information.\n"
        },
        {
            "name": "Refunds",
            "description": "We strongly suggest using the /reversals endpoint for its functionality and enhanced flexibility when dealing with refunds (the /refunds endpoint is still supported).\n\nA reversal will dynamically orchestrate a cancellation or refund based on the status of settlement process. A cancellation occurs if the transfer has not been settled. A refund occurs if the transfer is in the process of settling, or has already been settled.\n\nA reversal cannot exceed the original transfer amount, and once the reversal process has started, it cannot be canceled.\n"
        },
        {
            "name": "Representatives",
            "description": "We think of a representative as an individual who can take major actions on behalf of a business. A representative can be the business owner, or anyone who owns 25% or more of the business. Some examples of representatives are the CEO, CFO, COO, or president. We require all business accounts to have valid information for at least one representative. Moov accounts must have verified business representatives before a business account can send funds, collect money from other accounts, or store funds in a wallet. To learn more, read our guide on business representatives.\n"
        },
        {
            "name": "Schedules",
            "description": "Set up future transfers through scheduling.\n"
        },
        {
            "name": "Transfers",
            "description": "A transfer is the movement of money between Moov accounts, from source to destination. You can initiate a transfer to another Moov account as long as there is a linked and verified payment method.\n\nWith Moov, you can also implement transfer groups, allowing you to associate multiple transfers together and run them sequentially. To learn more, read our guide on transfer groups.\n\nYou can simulate various RTP, push to card, ACH, and declined transfer scenarios in test mode. See our test mode guide for more information.\n"
        },
        {
            "name": "Underwriting",
            "description": "Underwriting is a tool Moov uses to understand a business’s profile before allowing them to collect funds on our platform. This profile includes information like a description of the company or the merchant’s business model, the industry they operate in, and transaction volume. Through underwriting, we can understand and prevent unnecessary financial risk for Moov and those transacting on our platform. Note that underwriting can be instant, but in some cases make take around 2 business days before approval.\n"
        },
        {
            "name": "Wallet transactions",
            "description": "Wallet transactions provide insight into funds that move in and out of an account’s wallet. For each Moov transfer, we create a corresponding transaction that represents how that initial source impacted a wallet. Read more about wallet transactions.\n"
        },
        {
            "name": "Wallets",
            "description": "A Moov wallet can serve as a funding source as you accumulate funds. You can also use the Moov wallet to:\n - Pre-fund transfers for faster payouts\n - Transfer funds between Moov wallets for instantly available funds\n\n If you've requested the send-funds or collect-funds capability, the wallet capability will be automatically requested as well. Read more on the data requirements for wallets here.\n"
        }
    ],
    "paths": {
        "/oauth2/token": {
            "post": {
                "operationId": "CreateOAuth2Token",
                "summary": "Create access token",
                "description": "Use the client_id and client_secret to generate an access token.",
                "tags": [
                    "Access token"
                ],
                "security": [
                    {
                        "OAuth2Credentials": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "description": "Allows the use of Client Credentials Grant per the RFC 6749 of OAuth 2.0 Authorization Framework. Following this specification will allow any tooling to be able to use this API to get an access_token.",
                                "properties": {
                                    "grant_type": {
                                        "type": "string",
                                        "enum": [
                                            "client_credentials",
                                            "refresh_token"
                                        ]
                                    },
                                    "client_id": {
                                        "description": "If not specified in Authorization: Basic it can be specified here.",
                                        "example": "5clTR_MdVrrkgxw2",
                                        "type": "string",
                                        "format": "byte",
                                        "nullable": true
                                    },
                                    "client_secret": {
                                        "description": "If not specified in Authorization: Basic it can be specified here.",
                                        "example": "dNC-hg7sVm22jc3g_Eogtyu0_1Mqh_4-",
                                        "type": "string",
                                        "format": "byte",
                                        "nullable": true
                                    },
                                    "scope": {
                                        "description": "A space-delimited list of scopes that are allowed.",
                                        "type": "string",
                                        "example": "/accounts.write"
                                    },
                                    "refresh_token": {
                                        "description": "String passed to the authorization server to gain access to the system.",
                                        "example": "i1qxz68gu50zp4i8ceyxqogmq7y0yienm52351c6...",
                                        "type": "string",
                                        "format": "byte",
                                        "maxLength": 4096
                                    }
                                },
                                "required": [
                                    "grant_type"
                                ]
                            }
                        },
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "description": "Allows the use of Client Credentials Grant per the RFC 6749 of OAuth 2.0 Authorization Framework. Following this specification will allow any tooling to be able to use this API to get an access_token.",
                                "properties": {
                                    "grant_type": {
                                        "type": "string",
                                        "enum": [
                                            "client_credentials",
                                            "refresh_token"
                                        ]
                                    },
                                    "client_id": {
                                        "description": "If not specified in Authorization: Basic it can be specified here.",
                                        "example": "5clTR_MdVrrkgxw2",
                                        "type": "string",
                                        "format": "byte",
                                        "nullable": true
                                    },
                                    "client_secret": {
                                        "description": "If not specified in Authorization: Basic it can be specified here.",
                                        "example": "dNC-hg7sVm22jc3g_Eogtyu0_1Mqh_4-",
                                        "type": "string",
                                        "format": "byte",
                                        "nullable": true
                                    },
                                    "scope": {
                                        "description": "A space-delimited list of scopes that are allowed.",
                                        "type": "string",
                                        "example": "/accounts.write"
                                    },
                                    "refresh_token": {
                                        "description": "String passed to the authorization server to gain access to the system.",
                                        "example": "i1qxz68gu50zp4i8ceyxqogmq7y0yienm52351c6...",
                                        "type": "string",
                                        "format": "byte",
                                        "maxLength": 4096
                                    }
                                },
                                "required": [
                                    "grant_type"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successfully exchanged the code to create a token",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Possible responses that can be made to the /token endpoints. The type of response returned here will mirror the type of the request.",
                                    "oneOf": [
                                        {
                                            "description": "Device model",
                                            "type": "object",
                                            "additionalProperties": false,
                                            "properties": {
                                                "access_token": {
                                                    "description": "String passed to the authorization server to gain access to the system.",
                                                    "example": "i1qxz68gu50zp4i8ceyxqogmq7y0yienm52351c6...",
                                                    "type": "string",
                                                    "format": "byte",
                                                    "maxLength": 4096
                                                },
                                                "refresh_token": {
                                                    "description": "String passed to the authorization server to gain access to the system.",
                                                    "example": "i1qxz68gu50zp4i8ceyxqogmq7y0yienm52351c6...",
                                                    "type": "string",
                                                    "format": "byte",
                                                    "maxLength": 4096
                                                },
                                                "token_type": {
                                                    "description": "Type of token returned. Opaque is not parse-able while JWT follows JWT spec.",
                                                    "type": "string",
                                                    "enum": [
                                                        "opaque",
                                                        "jwt"
                                                    ]
                                                },
                                                "expires_in": {
                                                    "description": "Number of seconds the token is valid for.",
                                                    "type": "integer",
                                                    "format": "int32",
                                                    "example": 900
                                                },
                                                "scope": {
                                                    "description": "A space-delimited list of scopes that are allowed.",
                                                    "type": "string",
                                                    "example": "/accounts.write"
                                                }
                                            }
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Failure create token",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "oneOf": [
                                        {
                                            "description": "Error happened when trying to obtain an access token.",
                                            "type": "object",
                                            "additionalProperties": false,
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "invalid_request",
                                                        "invalid_client",
                                                        "invalid_grant",
                                                        "unauthorized_client",
                                                        "unsupported_grant_type",
                                                        "invalid_scope"
                                                    ]
                                                }
                                            }
                                        }
                                    ]
                                }
                            }
                        }
                    },
                    "429": {
                        "description": "Request was refused due to rate limiting.",
                        "headers": {
                            "X-Retry-In": {
                                "description": "How long (in milliseconds) to wait until able to retry the request.",
                                "schema": {
                                    "type": "string",
                                    "format": "duration",
                                    "example": "46.748934ms"
                                }
                            }
                        },
                        "content": {
                            "text/plain": {
                                "schema": {
                                    "type": "string",
                                    "example": "",
                                    "maxLength": 0,
                                    "pattern": "\s{0}"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Empty response for unauthorized or any other returned http status code.",
                        "content": {
                            "text/plain": {
                                "schema": {
                                    "type": "string",
                                    "example": "",
                                    "maxLength": 0,
                                    "pattern": "\s{0}"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/oauth2/revoke": {
            "post": {
                "operationId": "RevokeOAuth2Token",
                "summary": "Revoke access token",
                "description": "Allows clients to notify the authorization server that a previously obtained refresh or access token is no longer needed",
                "tags": [
                    "Access token"
                ],
                "security": [
                    {
                        "OAuth2Credentials": []
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "description": "Allows clients to notify the authorization server that a previously obtained refresh or access token is no longer needed.",
                                "type": "object",
                                "additionalProperties": false,
                                "properties": {
                                    "token": {
                                        "description": "String passed to the authorization server to gain access to the system.",
                                        "example": "i1qxz68gu50zp4i8ceyxqogmq7y0yienm52351c6...",
                                        "type": "string",
                                        "format": "byte",
                                        "maxLength": 4096
                                    },
                                    "token_type_hint": {
                                        "description": "A hint about the type of the token submitted for revocation",
                                        "type": "string",
                                        "enum": [
                                            "access_token",
                                            "refresh_token"
                                        ]
                                    },
                                    "client_id": {
                                        "description": "If not specified in Authorization: Basic it can be specified here",
                                        "example": "5clTR_MdVrrkgxw2",
                                        "type": "string",
                                        "format": "byte",
                                        "nullable": true
                                    },
                                    "client_secret": {
                                        "description": "If not specified in Authorization: Basic it can be specified here",
                                        "example": "dNC-hg7sVm22jc3g_Eogtyu0_1Mqh_4-",
                                        "type": "string",
                                        "format": "byte",
                                        "nullable": true
                                    }
                                },
                                "required": [
                                    "token"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "204": {
                        "description": "Successful empty response for unauthorized or any other returned http status code.",
                        "content": {
                            "text/plain": {
                                "schema": {
                                    "type": "string",
                                    "example": "",
                                    "maxLength": 0,
                                    "pattern": "\s{0}"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Failed to revoke token"
                    },
                    "429": {
                        "description": "Request was refused due to rate limiting.",
                        "headers": {
                            "X-Retry-In": {
                                "description": "How long (in milliseconds) to wait until able to retry the request.",
                                "schema": {
                                    "type": "string",
                                    "format": "duration",
                                    "example": "46.748934ms"
                                }
                            }
                        },
                        "content": {
                            "text/plain": {
                                "schema": {
                                    "type": "string",
                                    "example": "",
                                    "maxLength": 0,
                                    "pattern": "\s{0}"
                                }
                            }
                        }
                    },
                    "default": {
                        "description": "Empty response for unauthorized or any other returned http status code.",
                        "content": {
                            "text/plain": {
                                "schema": {
                                    "type": "string",
                                    "example": "",
                                    "maxLength": 0,
                                    "pattern": "\s{0}"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/accounts": {
            "get": {
                "summary": "List accounts",
                "operationId": "listAccounts",
                "description": "List or search accounts to which the caller is connected.

\nAll supported query parameters are optional. If none are provided\nthe response will include all connected accounts. Pagination is\nsupported via the skip and count query parameters.

\nSearching by name and email will overlap and return results based on relevance.\n

To use this endpoint from the browser, you'll need to specify the /accounts.read scope when generating a token.\n",
                "tags": [
                    "Accounts"
                ],
                "parameters": [
                    {
                        "name": "name",
                        "in": "query",
                        "description": "Filter connected accounts by name.

\nIf provided, this query will attempt to find matches against the following Account and Profile fields:\n

    \n 
  • Account displayName
  • \n 
  • Individual Profile firstName, middleName, and lastName
  • \n 
  • Business Profile legalBusinessName
  • \n
\n",
                        "example": "Frank",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "email",
                        "in": "query",
                        "description": "Filter connected accounts by email address.

\nProvide the full email address to filter by email.\n",
                        "example": "someone@moov.io",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "type",
                        "in": "query",
                        "description": "Filter connected accounts by AccountType.

\nIf the type parameter is used in combination with name, only the corresponding type's name fields will be searched.\nFor example, if type=business and name=moov, the search will attempt to find matches against the display name and Business Profile name fields (legalBusinessName, and doingBusinessAs).\n",
                        "example": "business",
                        "schema": {
                            "description": "The type of entity represented by this account.",
                            "example": "business",
                            "type": "string",
                            "enum": [
                                "individual",
                                "business"
                            ]
                        }
                    },
                    {
                        "name": "foreignID",
                        "in": "query",
                        "description": "Serves as an optional alias from a foreign/external system which can be used to reference this resource.\n",
                        "example": "4528aba-b9a1-11eb-8529-0242ac13003",
                        "schema": {
                            "description": "Optional alias from a foreign/external system which can be used to reference this resource.",
                            "type": "string",
                            "example": "4528aba-b9a1-11eb-8529-0242ac13003",
                            "maxLength": 64
                        }
                    },
                    {
                        "name": "includeDisconnected",
                        "in": "query",
                        "description": "Filter disconnected accounts.

\nIf true, the response will include disconnected accounts.\n",
                        "example": true,
                        "schema": {
                            "type": "boolean"
                        }
                    },
                    {
                        "name": "count",
                        "in": "query",
                        "description": "Optional parameter to limit the number of results in the query.",
                        "example": 10,
                        "schema": {
                            "type": "integer",
                            "default": 20,
                            "maximum": 200
                        }
                    },
                    {
                        "name": "skip",
                        "in": "query",
                        "description": "The number of items to offset before starting to collect the result set.",
                        "example": 10,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "capability",
                        "in": "query",
                        "description": "Filter connected accounts by the capability.\n",
                        "schema": {
                            "description": "Identifier for the capability.",
                            "type": "string",
                            "enum": [
                                "transfers",
                                "send-funds",
                                "collect-funds",
                                "wallet",
                                "card-issuing"
                            ]
                        }
                    },
                    {
                        "name": "capabilityStatus",
                        "in": "query",
                        "description": "Filter connected accounts by the capability status.\n",
                        "schema": {
                            "description": "The status of the capability requested for an account.",
                            "type": "string",
                            "enum": [
                                "enabled",
                                "disabled",
                                "pending",
                                "in-review"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "All connected accounts matching the filter parameters.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "description": "Describes a Moov account.",
                                        "type": "object",
                                        "additionalProperties": false,
                                        "properties": {
                                            "mode": {
                                                "description": "The mode this account is allowed to be used within.",
                                                "example": "production",
                                                "type": "string",
                                                "enum": [
                                                    "sandbox",
                                                    "production"
                                                ]
                                            },
                                            "accountID": {
                                                "description": "UUID v4",
                                                "type": "string",
                                                "format": "uuid",
                                                "maxLength": 36,
                                                "example": "ec7e1848-dc80-4ab0-8827-dd7fc0737b43",
                                                "pattern": "^[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}$"
                                            },
                                            "accountType": {
                                                "description": "The type of entity represented by this account.",
                                                "example": "business",
                                                "type": "string",
                                                "enum": [
                                                    "individual",
                                                    "business"
                                                ]
                                            },
                                            "displayName": {
                                                "example": "Whole Body Fitness",
                                                "type": "string",
                                                "maxLength": 64
                                            },
                                            "profile": {
                                                "description": "Describes a Moov account profile.",
                                                "type": "object",
                                                "additionalProperties": false,
                                                "properties": {
                                                    "individual": {
                                                        "type": "object",
                                                        "nullable": true,
                                                        "allOf": [
                                                            {
                                                                "description": "Describes an individual.",
                                                                "type": "object",
                                                                "additionalProperties": false,
                                                                "properties": {
                                                                    "name": {
                                                                        "description": "An individual's name.",
                                                                        "type": "object",
                                                                        "additionalProperties": false,
                                                                        "properties": {
                                                                            "firstName": {
                                                                                "description": "Name this person was given. This is usually the same as first name.",
                                                                                "type": "string",
                                                                                "pattern": "^[ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝ߯àáâãäåçèéêëìíîïðñòóôõöøùúûüýþÿ"'(),\-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\]abcdefghijklmnopqrstuvwxyz{}~ &!]$",
                                                                                "example": "Amanda",
                                                                                "maxLength": 64
                                                                            },
                                                                            "middleName": {
                                                                                "description": "Name this person was given. This is usually the same as first name.",
                                                                                "type": "string",
                                                                                "pattern": "^[ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝ߯àáâãäåçèéêëìíîïðñòóôõöøùúûüýþÿ"'(),\-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\]abcdefghijklmnopqrstuvwxyz{}~ &!]
$",
                                                                                "example": "Amanda",
                                                                                "maxLength": 64
                                                                            },
                                                                            "lastName": {
                                                                                "description": "Family name of this person. This is usually the same as last name.",
                                                                                "type": "string",
                                                                                "pattern": "^[ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝ߯àáâãäåçèéêëìíîïðñòóôõöøùúûüýþÿ"'(),\-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\]abcdefghijklmnopqrstuvwxyz{}~ &!]$",
                                                                                "example": "Yang",
                                                                                "maxLength": 64
                                                                            },
                                                                            "suffix": {
                                                                                "description": "Suffix of a given name.",
                                                                                "type": "string",
                                                                                "pattern": "^[ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝ߯àáâãäåçèéêëìíîïðñòóôõöøùúûüýþÿ"'(),\-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\]abcdefghijklmnopqrstuvwxyz{}~ &!]
$",
                                                                                "example": "Jr",
                                                                                "maxLength": 20
                                                                            }
                                                                        },
                                                                        "required": [
                                                                            "firstName",
                                                                            "lastName"
                                                                        ]
                                                                    },
                                                                    "phone": {
                                                                        "type": "object",
                                                                        "nullable": true,
                                                                        "allOf": [
                                                                            {
                                                                                "type": "object",
                                                                                "additionalProperties": false,
                                                                                "properties": {
                                                                                    "number": {
                                                                                        "type": "string",
                                                                                        "format": "phone",
                                                                                        "example": "8185551212",
                                                                                        "maxLength": 10
                                                                                    },
                                                                                    "countryCode": {
                                                                                        "type": "string",
                                                                                        "example": "1",
                                                                                        "maxLength": 1
                                                                                    }
                                                                                }
                                                                            }
                                                                        ]
                                                                    },
                                                                    "email": {
                                                                        "description": "Email address.",
                                                                        "type": "string",
                                                                        "format": "email",
                                                                        "example": "amanda@classbooker.dev",
                                                                        "pattern": "^([a-zA-Z0-9_\-\.]+\+?[a-zA-Z0-9\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$",
                                                                        "maxLength": 255
                                                                    },
                                                                    "address": {
                                                                        "type": "object",
                                                                        "nullable": true,
                                                                        "allOf": [
                                                                            {
                                                                                "type": "object",
                                                                                "additionalProperties": false,
                                                                                "properties": {
                                                                                    "addressLine1": {
                                                                                        "type": "string",
                                                                                        "example": "123 Main Street",
                                                                                        "maxLength": 60
                                                                                    },
                                                                                    "addressLine2": {
                                                                                        "type": "string",
                                                                                        "example": "Apt 302",
                                                                                        "maxLength": 32
                                                                                    },
                                                                                    "city": {
                                                                                        "type": "string",
                                                                                        "example": "Boulder",
                                                                                        "maxLength": 24
                                                                                    },
                                                                                    "stateOrProvince": {
                                                                                        "type": "string",
                                                                                        "example": "CO",
                                                                                        "maxLength": 2
                                                                                    },
                                                                                    "postalCode": {
                                                                                        "type": "string",
                                                                                        "example": "80301",
                                                                                        "maxLength": 5
                                                                                    },
                                                                                    "country": {
                                                                                        "type": "string",
                                                                                        "example": "US",
                                                                                        "maxLength": 2
                                                                                    }
                                                                                },
                                                                                "required": [
                                                                                    "addressLine1",
                                                                                    "city",
                                                                                    "stateOrProvince",
                                                                                    "postalCode",
                                                                                    "country"
                                                                                ]
                                                                            }
                                                                        ]
                                                                    },
                                                                    "birthDateProvided": {
                                                                        "description": "Indicates whether this individual's birth date has been provided.",
                                                                        "type": "boolean",
                                                                        "default": false
                                                                    },
                                                                    "governmentIDProvided": {
                                                                        "description": "Indicates whether a government ID (SSN, ITIN, etc.) has been provided for this individual.",
                                                                        "type": "boolean",
                                                                        "default": false
                                                                    }
                                                                }
                                                            }
                                                        ]
                                                    },
                                                    "business": {
                                                        "type": "object",
                                                        "nullable": true,
                                                        "allOf": [
                                                            {
                                                                "description": "Describes a business.",
                                                                "type": "object",
                                                                "additionalProperties": false,
                                                                "properties": {
                                                                    "legalBusinessName": {
                                                                        "type": "string",
                                                                        "maxLength": 64
                                                                    },
                                                                    "doingBusinessAs": {
                                                                        "type": "string",
                                                                        "maxLength": 64
                                                                    },
                                                                    "businessType": {
                                                                        "type": "string",
                                                                        "nullable": true,
                                                                        "allOf": [
                                                                            {
                                                                                "description": "The type of entity represented by this business.",
                                                                                "type": "string",
                                                                                "example": "llc",
                                                                                "enum": [
                                                                                    "soleProprietorship",
                                                                                    "unincorporatedAssociation",
                                                                                    "trust",
                                                                                    "publicCorporation",
                                                                                    "privateCorporation",
                                                                                    "llc",
                                                                                    "partnership",
                                                                                    "unincorporatedNonProfit",
                                                                                    "incorporatedNonProfit",
                                                                                    "governmentEntity"
                                                                                ]
                                                                            }
                                                                        ]
                                                                    },
                                                                    "address": {
                                                                        "type": "object",
                                                                        "nullable": true,
                                                                        "allOf": [
                                                                            {
                                                                                "type": "object",
                                                                                "additionalProperties": false,
                                                                                "properties": {
                                                                                    "addressLine1": {
                                                                                        "type": "string",
                                                                                        "example": "123 Main Street",
                                                                                        "maxLength": 60
                                                                                    },
                                                                                    "addressLine2": {
                                                                                        "type": "string",
                                                                                        "example": "Apt 302",
                                                                                        "maxLength": 32
                                                                                    },
                                                                                    "city": {
                                                                                        "type": "string",
                                                                                        "example": "Boulder",
                                                                                        "maxLength": 24
                                                                                    },
                                                                                    "stateOrProvince": {
                                                                                        "type": "string",
                                                                                        "example": "CO",
                                                                                        "maxLength": 2
                                                                                    },
                                                                                    "postalCode": {
                                                                                        "type": "string",
                                                                                        "example": "80301",
                                                                                        "maxLength": 5
                                                                                    },
                                                                                    "country": {
                                                                                        "type": "string",
                                                                                        "example": "US",
                                                                                        "maxLength": 2
                                                                                    }
                                                                                },
                                                                                "required": [
                                                                                    "addressLine1",
                                                                                    "city",
                                                                                    "stateOrProvince",
                                                                                    "postalCode",
                                                                                    "country"
                                                                                ]
                                                                            }
                                                                        ]
                                                                    },
                                                                    "phone": {
                                                                        "type": "object",
                                                                        "nullable": true,
                                                                        "allOf": [
                                                                            {
                                                                                "type": "object",
                                                                                "additionalProperties": false,
                                                                                "properties": {
                                                                                    "number": {
                                                                                        "type": "string",
                                                                                        "format": "phone",
                                                                                        "example": "8185551212",
                                                                                        "maxLength": 10
                                                                                    },
                                                                                    "countryCode": {
                                                                                        "type": "string",
                                                                                        "example": "1",
                                                                                        "maxLength": 1
                                                                                    }
                                                                                }
                                                                            }
                                                                        ]
                                                                    },
                                                                    "email": {
                                                                        "description": "Email address.",
                                                                        "type": "string",
                                                                        "format": "email",
                                                                        "example": "amanda@classbooker.dev",
                                                                        "pattern": "^([a-zA-Z0-9_\-\.]+\+?[a-zA-Z0-9\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$",
                                                                        "maxLength": 255
                                                                    },
                                                                    "website": {
                                                                        "example": "www.wholebodyfitnessgym.com",
                                                                        "type": "string",
                                                                        "maxLength": 100
                                                                    },
                                                                    "description": {
                                                                        "type": "string",
                                                                        "example": "Local fitness gym paying out instructors",
                                                                        "minLength": 10,
                                                                        "maxLength": 100
                                                                    },
                                                                    "taxIDProvided": {
                                                                        "description": "Indicates whether a tax ID has been provided for this business.",
                                                                        "type": "boolean",
                                                                        "default": false
                                                                    },
                                                                    "representatives": {
                                                                        "type": "array",
                                                                        "items": {
                                                                            "description": "Describes a business representative.",
                                                                            "type": "object",
                                                                            "additionalProperties": false,
                                                                            "properties": {
                                                                                "representativeID": {
                                                                                    "description": "UUID v4",
                                                                                    "type": "string",
                                                                                    "format": "uuid",
                                                                                    "maxLength": 36,
                                                                                    "example": "ec7e1848-dc80-4ab0-8827-dd7fc0737b43",
                                                                                    "pattern": "^[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}$"
                                                                                },
                                                                                "name": {
                                                                                    "description": "An individual's name.",
                                                                                    "type": "object",
                                                                                    "additionalProperties": false,
                                                                                    "properties": {
                                                                                        "firstName": {
                                                                                            "description": "Name this person was given. This is usually the same as first name.",
                                                                                            "type": "string",
                                                                                            "pattern": "^[ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝ߯àáâãäåçèéêëìíîïðñòóôõöøùúûüýþÿ"'(),\-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\]abcdefghijklmnopqrstuvwxyz{}~ &!]$",
                                                                                            "example": "Amanda",
                                                                                            "maxLength": 64
                                                                                        },
                                                                                        "middleName": {
                                                                                            "description": "Name this person was given. This is usually the same as first name.",
                                                                                            "type": "string",
                                                                                            "pattern": "^[ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝ߯àáâãäåçèéêëìíîïðñòóôõöøùúûüýþÿ"'(),\-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\]abcdefghijklmnopqrstuvwxyz{}~ &!]
$",
                                                                                            "example": "Amanda",
                                                                                            "maxLength": 64
                                                                                        },
                                                                                        "lastName": {
                                                                                            "description": "Family name of this person. This is usually the same as last name.",
                                                                                            "type": "string",
                                                                                            "pattern": "^[ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝ߯àáâãäåçèéêëìíîïðñòóôõöøùúûüýþÿ"'(),\-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\]abcdefghijklmnopqrstuvwxyz{}~ &!]$",
                                                                                            "example": "Yang",
                                                                                            "maxLength": 64
                                                                                        },
                                                                                        "suffix": {
                                                                                            "description": "Suffix of a given name.",
                                                                                            "type": "string",
                                                                                            "pattern": "^[ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝ߯àáâãäåçèéêëìíîïðñòóôõöøùúûüýþÿ"'(),\-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\]abcdefghijklmnopqrstuvwxyz{}~ &!]
$",
                                                                                            "example": "Jr",
                                                                                            "maxLength": 20
                                                                                        }
                                                                                    },
                                                                                    "required": [
                                                                                        "firstName",
                                                                                        "lastName"
                                                                                    ]
                                                                                },
                                                                                "phone": {
                                                                                    "type": "object",
                                                                                    "nullable": true,
                                                                                    "allOf": [
                                                                                        {
                                                                                            "type": "object",
                                                                                            "additionalProperties": false,
                                                                                            "properties": {
                                                                                                "number": {
                                                                                                    "type": "string",
                                                                                                    "format": "phone",
                                                                                                    "example": "8185551212",
                                                                                                    "maxLength": 10
                                                                                                },
                                                                                                "countryCode": {
                                                                                                    "type": "string",
                                                                                                    "example": "1",
                                                                                                    "maxLength": 1
                                                                                                }
                                                                                            }
                                                                                        }
                                                                                    ]
                                                                                },
                                                                                "email": {
                                                                                    "description": "Email address.",
                                                                                    "type": "string",
                                                                                    "format": "email",
                                                                                    "example": "amanda@classbooker.dev",
                                                                                    "pattern": "^([a-zA-Z0-9_\-\.]+\+?[a-zA-Z0-9\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$",
                                                                                    "maxLength": 255
                                                                                },
                                                                                "address": {
                                                                                    "type": "object",
                                                                                    "nullable": true,
                                                                                    "allOf": [
                                                                                        {
                                                                                            "type": "object",
                                                                                            "additionalProperties": false,
                                                                                            "properties": {
                                                                                                "addressLine1": {
                                                                                                    "type": "string",
                                                                                                    "example": "123 Main Street",
                                                                                                    "maxLength": 60
                                                                                                },
                                                                                                "addressLine2": {
                                                                                                    "type": "string",
                                                                                                    "example": "Apt 302",
                                                                                                    "maxLength": 32
                                                                                                },
                                                                                                "city": {
                                                                                                    "type": "string",
                                                                                                    "example": "Boulder",
                                                                                                    "maxLength": 24
                                                                                                },
                                                                                                "stateOrProvince": {
                                                                                                    "type": "string",
                                                                                                    "example": "CO",
                                                                                                    "maxLength": 2
                                                                                                },
                                                                                                "postalCode": {
                                                                                                    "type": "string",
                                                                                                    "example": "80301",
                                                                                                    "maxLength": 5
                                                                                                },
                                                                                                "country": {
                                                                                                    "type": "string",
                                                                                                    "example": "US",
                                                                                                    "maxLength": 2
                                                                                                }
                                                                                            },
                                                                                            "required": [
                                                                                                "addressLine1",
                                                                                                "city",
                                                                                                "stateOrProvince",
                                                                                                "postalCode",
                                                                                                "country"
                                                                                            ]
                                                                                        }
                                                                                    ]
                                                                                },
                                                                                "birthDateProvided": {
                                                                                    "description": "Indicates whether this representative's birth date has been provided.",
                                                                                    "type": "boolean",
                                                                                    "default": false
                                                                                },
                                                                                "governmentIDProvided": {
                                                                                    "description": "Indicates whether a government ID (SSN, ITIN, etc.) has been provided for this representative.",
                                                                                    "type": "boolean",
                                                                                    "default": false
                                                                                },
                                                                                "responsibilities": {
                                                                                    "type": "object",
                                                                                    "nullable": true,
                                                                                    "allOf": [
                                                                                        {
                                                                                            "description": "Describes the job responsibilities of an individual.",
                                                                                            "type": "object",
                                                                                            "additionalProperties": false,
                                                                                            "properties": {
                                                                                                "isController": {
                                                                                                    "description": "Indicates whether this individual has significant management responsibilities within the business.",
                                                                                                    "type": "boolean",
                                                                                                    "example": false,
                                                                                                    "default": false
                                                                                                },
                                                                                                "isOwner": {
                                                                                                    "description": "If true, this field indicates that the individual has a business ownership stake of at least 25% in the business. If the representative does not own at least 25% of the business, this field should be false.",
                                                                                                    "type": "boolean",
                                                                                                    "example": true,
                                                                                                    "default": false
                                                                                                },
                                                                                                "ownershipPercentage": {
                                                                                                    "description": "The percentage of ownership this individual has in the business (required if isOwner is true).",
                                                                                                    "type": "integer",
                                                                                                    "example": 38
                                                                                                },
                                                                                                "jobTitle": {
                                                                                                    "type": "string",
                                                                                                    "example": "CEO",
                                                                                                    "maxLength": 64
                                                                                                }
                                                                                            },
                                                                                            "required": [
                                                                                                "isController",
                                                                                                "isOwner",
                                                                                                "ownershipPercentage",
                                                                                                "jobTitle"
                                                                                            ]
                                                                                        }
                                                                                    ]
                                                                                },
                                                                                "createdOn": {
                                                                                    "type": "string",
                                                                                    "format": "date-time",
                                                                                    "maxLength": 24
                                                                                },
                                                                                "updatedOn": {
                                                                                    "type": "string",
                                                                                    "format": "date-time",
                                                                                    "maxLength": 24
                                                                                },
                                                                                "disabledOn": {
                                                                                    "type": "string",
                                                                                    "nullable": true,
                                                                                    "allOf": [
                                                                                        {
                                                                                            "type": "string",
                                                                                            "format": "date-time",
                                                                                            "maxLength": 24
                                                                                        }
                                                                                    ]
                                                                                }
                                                                            }
                                                                        },
                                                                        "example": []
                                                                    },
                                                                    "ownersProvided": {
                                                                        "type": "boolean"
                                                                    },
                                                                    "industryCodes": {
                                                                        "type": "object",
                                                                        "nullable": true,
                                                                        "allOf": [
                                                                            {
                                                                                "description": "Describes industry specific identifiers.",
                                                                                "type": "object",
                                                                                "additionalProperties": false,
                                                                                "properties": {
                                                                                    "naics": {
                                                                                        "type": "string",
                                                                                        "example": "713940",
                                                                                        "minLength": 2,
                                                                                        "maxLength": 6
                                                                                    },
                                                                                    "sic": {
                                                                                        "type": "string",
                                                                                        "example": "7991",
                                                                                        "minLength": 4,
                                                                                        "maxLength": 4
                                                                                    },
                                                                                    "mcc": {
                                                                                        "type": "string",
                                                                                        "example": "7997",
                                                                                        "minLength": 4,
                                                                                        "maxLength": 4
                                                                                    }
                                                                                }
                                                                            }
                                                                        ]
                                                                    },
                                                                    "primaryRegulator": {
                                                                        "type": "string",
                                                                        "nullable": true,
                                                                        "allOf": [
                                                                            {
                                                                                "description": "If the business is a financial institution, this field describes its primary regulator.",
                                                                                "type": "string",
                                                                                "example": "FDIC",
                                                                                "enum": [
                                                                                    "OCC",
                                                                                    "FDIC",
                                                                                    "NCUA",
                                                                                    "FRB"
                                                                                ]
                                                                            }
                                                                        ]
                                                                    }
                                                                },
                                                                "required": [
                                                                    "ownersProvided"
                                                                ]
                                                            }
                                                        ]
                                                    }
                                                }
                                            },
    …example: ( "arg1": ( "type": "string" ), "arg2":f type": "number" ) ) client_id, api_keyAuthorization, X-API-Key, /api/*, /api/postshttps://photos.app.goo.gl/be78qdBJ3nTCSxfb6# WalletConnect Pay

Digital payments across blockchains remain inconsistent. Payments are fragmented by geography and Rail. For example, a few countries in Latin America run on PIX and Mercado Pago, Europe on SEPA and cards, Southeast Asia on QR wallets like GrabPay and GCash, China on Alipay and WeChat Pay, India on UPI.

Each region invented its own system, none of them interoperate, and merchants and PSPs are forced to support whatever their local stack dictates. Users adapt to the rail in front of them rather than the method they prefer.

In the world of Crypto payments, each wallet, merchant, and provider implements its own integration model. This fragmentation slows innovation and limits interoperability.

To address this, WalletConnect introduces the WalletConnect Pay.

WalletConnect Pay provides a complete end-to-end crypto payment solution that fits directly into an existing Payment Service Provider (PSP) stack, allowing crypto payments to be offered without changing how payments operate today.

It also aligns with common payment compliance requirements, such as required customer and transaction information capture and screening steps, so providers can keep the same operational and compliance controls they rely on today.

Who is WalletConnect Pay for?

There are a couple of primary actors that can benefit from WalletConnect Pay:

  • Payment Service Providers (PSPs) and Acquirers - PSPs and Acquirers can use the POS (Point of Sale) SDK to integrate WalletConnect Pay into their existing payment stack. This allows them to offer their merchants and customers an option to accept crypto payments without changing how payments operate today.
  • Merchants - PSPs and Acquirers can offer their merchants an option to accept crypto payments without changing how payments operate today.
  • Wallets - Wallets can work closely with WalletConnect to provide a seamless payment experience for their users by integrating the WalletConnect Pay SDK into their wallet.
Are you a PSP or Acquirer? Fill out this form to learn how you can integrate WalletConnect Pay. Are you a Wallet or Pay Provider? Fill out this form to learn how you can integrate WalletConnect Pay.

What would WalletConnect Pay look like in action?

WalletConnect Pay would live inside the POS device that a merchant uses to accept day-to-day payments. The flow would be as follows:

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.

3 participants