Moov Accounts API

Create and manage Moov accounts representing individual or business legal entities. Accounts are the foundation for all money movement operations.

OpenAPI Specification

moov-accounts-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Moov Accounts API
  description: The Moov API is a RESTful financial infrastructure platform that enables developers to integrate money movement capabilities into their applications. The API supports a full range of financial operations including account management, payment method onboarding, transfers, sweeps, refunds, dispute resolution, card issuing, and payment links. It provides capabilities for accepting payments, storing funds in digital wallets, sending money between accounts, and issuing cards for spend management. Authentication uses OAuth2 access tokens with permission scopes, and the API returns JSON responses using standard HTTP response codes.
  version: 2026.01.00
  contact:
    name: Moov Support
    url: https://docs.moov.io/
  termsOfService: https://moov.io/legal/platform-agreement/
servers:
- url: https://api.moov.io
  description: Production Server
security:
- bearerAuth: []
tags:
- name: Accounts
  description: Create and manage Moov accounts representing individual or business legal entities. Accounts are the foundation for all money movement operations.
paths:
  /tos-token:
    get:
      operationId: generateTosToken
      summary: Generate a terms of service token
      description: Retrieve a short-lived terms of service token required when creating new Moov accounts on behalf of users. The token confirms acceptance of Moov's platform agreement.
      tags:
      - Accounts
      responses:
        '200':
          description: Terms of service token generated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TosToken'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /accounts:
    post:
      operationId: createAccount
      summary: Create an account
      description: Create a new Moov account representing an individual or business legal entity. Accounts are required before linking payment methods or initiating transfers. Include a terms of service token from the /tos-token endpoint.
      tags:
      - Accounts
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAccountRequest'
      responses:
        '200':
          description: Account created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
    get:
      operationId: listAccounts
      summary: List accounts
      description: Retrieve a list of accounts connected to your platform. Supports filtering by name, email, and type to locate specific accounts.
      tags:
      - Accounts
      parameters:
      - $ref: '#/components/parameters/CountParam'
      - $ref: '#/components/parameters/SkipParam'
      - name: name
        in: query
        description: Filter accounts by display name.
        schema:
          type: string
      - name: email
        in: query
        description: Filter accounts by email address.
        schema:
          type: string
          format: email
      - name: type
        in: query
        description: Filter by account type (individual or business).
        schema:
          type: string
          enum:
          - individual
          - business
      responses:
        '200':
          description: List of accounts returned successfully.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Account'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /accounts/{accountID}:
    get:
      operationId: getAccount
      summary: Retrieve an account
      description: Fetch the full details of a specific Moov account by its unique identifier, including profile information, verification status, and capabilities.
      tags:
      - Accounts
      parameters:
      - $ref: '#/components/parameters/AccountIDParam'
      responses:
        '200':
          description: Account details returned successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateAccount
      summary: Update an account
      description: Modify the profile and settings of an existing Moov account. Only the fields provided in the request body will be updated; omitted fields remain unchanged.
      tags:
      - Accounts
      parameters:
      - $ref: '#/components/parameters/AccountIDParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAccountRequest'
      responses:
        '200':
          description: Account updated successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteAccount
      summary: Delete an account
      description: Remove a Moov account and all associated data. This operation is irreversible. Ensure all funds have been disbursed before deleting an account.
      tags:
      - Accounts
      parameters:
      - $ref: '#/components/parameters/AccountIDParam'
      responses:
        '204':
          description: Account deleted successfully.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /accounts/{accountID}/connections:
    post:
      operationId: shareAccountConnection
      summary: Share an account connection
      description: Establish a connection between two Moov accounts, enabling the platform account to act on behalf of the connected account for money movement and management operations.
      tags:
      - Accounts
      parameters:
      - $ref: '#/components/parameters/AccountIDParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AccountConnectionRequest'
      responses:
        '200':
          description: Account connection established.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountConnection'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /accounts/{accountID}/connected-accounts:
    get:
      operationId: listConnectedAccounts
      summary: List connected accounts
      description: Retrieve all accounts that have been connected to the specified account. Used by platform accounts to enumerate their linked user accounts.
      tags:
      - Accounts
      parameters:
      - $ref: '#/components/parameters/AccountIDParam'
      responses:
        '200':
          description: Connected accounts returned successfully.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Account'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  parameters:
    CountParam:
      name: count
      in: query
      description: Maximum number of results to return per page.
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 20
    AccountIDParam:
      name: accountID
      in: path
      required: true
      description: Unique identifier for the Moov account.
      schema:
        type: string
        format: uuid
    SkipParam:
      name: skip
      in: query
      description: Number of results to skip for pagination.
      schema:
        type: integer
        minimum: 0
        default: 0
  schemas:
    GovernmentID:
      type: object
      description: Government-issued identification for KYC verification.
      properties:
        ssn:
          $ref: '#/components/schemas/SsnOrItin'
        itin:
          $ref: '#/components/schemas/SsnOrItin'
    UpdateAccountRequest:
      type: object
      description: Request body for updating a Moov account. Only provided fields are updated.
      properties:
        profile:
          $ref: '#/components/schemas/AccountProfile'
        metadata:
          type: object
          description: Custom key-value metadata to attach to the account.
          additionalProperties:
            type: string
        foreignID:
          type: string
          description: External identifier from your system.
    Phone:
      type: object
      description: Phone number with country code.
      properties:
        number:
          type: string
          description: Phone number digits without formatting.
          pattern: ^\d{10,15}$
        countryCode:
          type: string
          description: International country calling code (e.g., "1" for US).
    BusinessProfile:
      type: object
      description: Profile data for a business Moov account.
      properties:
        legalBusinessName:
          type: string
          description: Registered legal name of the business.
        businessType:
          type: string
          description: Type of business entity.
          enum:
          - soleProprietorship
          - unincorporatedAssociation
          - trust
          - publicCorporation
          - privateCorporation
          - privateCorporation
          - llc
          - partnership
          - unincorporatedNonProfit
          - incorporatedNonProfit
        address:
          $ref: '#/components/schemas/Address'
        phone:
          $ref: '#/components/schemas/Phone'
        email:
          type: string
          format: email
          description: Primary business email address.
        website:
          type: string
          format: uri
          description: Business website URL.
        description:
          type: string
          description: Brief description of the business and its products or services.
        taxID:
          $ref: '#/components/schemas/TaxID'
        industryCodes:
          $ref: '#/components/schemas/IndustryCodes'
    Account:
      type: object
      description: A Moov account representing a legal entity (individual or business) that can send, receive, and store funds on the platform.
      properties:
        accountID:
          type: string
          format: uuid
          description: Unique identifier for the account.
        accountType:
          type: string
          description: Whether the account belongs to an individual or a business.
          enum:
          - individual
          - business
        displayName:
          type: string
          description: Human-readable name for the account.
        profile:
          $ref: '#/components/schemas/AccountProfile'
        capabilities:
          type: array
          description: List of capabilities enabled on this account.
          items:
            $ref: '#/components/schemas/Capability'
        verification:
          $ref: '#/components/schemas/AccountVerification'
        createdOn:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the account was created.
        updatedOn:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the account was last updated.
    CapabilityRequirement:
      type: object
      description: A requirement that must be satisfied to activate a capability.
      properties:
        requirement:
          type: string
          description: Machine-readable identifier for the requirement type.
        errorCode:
          type: string
          description: Error code providing more detail about why the requirement is unmet.
    Capability:
      type: object
      description: A feature or permission that enables specific financial operations on a Moov account, such as the ability to send or receive funds.
      properties:
        capability:
          type: string
          description: Identifier for the capability type (e.g., "transfers.push", "collect-funds").
        accountID:
          type: string
          format: uuid
          description: The account this capability belongs to.
        status:
          type: string
          description: Current activation status of the capability.
          enum:
          - enabled
          - disabled
          - pending
          - in-review
        requirements:
          type: array
          description: List of requirements that must be fulfilled to activate this capability.
          items:
            $ref: '#/components/schemas/CapabilityRequirement'
        disabledReason:
          type: string
          description: Explanation of why the capability is disabled, if applicable.
        createdOn:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the capability was created.
        updatedOn:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the capability was last updated.
    CreateAccountRequest:
      type: object
      description: Request body for creating a new Moov account.
      required:
      - accountType
      - profile
      properties:
        accountType:
          type: string
          description: Whether the account is for an individual or a business.
          enum:
          - individual
          - business
        profile:
          $ref: '#/components/schemas/AccountProfile'
        metadata:
          type: object
          description: Custom key-value metadata to attach to the account.
          additionalProperties:
            type: string
        termsOfService:
          type: object
          description: Terms of service acceptance details.
          properties:
            token:
              type: string
              description: Token obtained from the /tos-token endpoint.
        foreignID:
          type: string
          description: External identifier from your system to associate with this account.
    TosToken:
      type: object
      description: Short-lived token confirming acceptance of Moov's terms of service.
      properties:
        token:
          type: string
          description: The terms of service token to include when creating an account.
        expiresOn:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the token expires.
    AccountProfile:
      type: object
      description: Profile information for a Moov account.
      properties:
        individual:
          $ref: '#/components/schemas/IndividualProfile'
        business:
          $ref: '#/components/schemas/BusinessProfile'
    SsnOrItin:
      type: object
      description: Social Security Number or Individual Taxpayer Identification Number.
      properties:
        full:
          type: string
          description: Full 9-digit SSN or ITIN. Only provided on write; masked on read.
          pattern: ^\d{9}$
        lastFour:
          type: string
          description: Last four digits of the SSN or ITIN.
          pattern: ^\d{4}$
    AccountConnection:
      type: object
      description: An established connection between two Moov accounts.
      properties:
        accountID:
          type: string
          format: uuid
          description: The account that initiated the connection.
        partnerAccountID:
          type: string
          format: uuid
          description: The connected partner account.
        createdOn:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the connection was created.
    Address:
      type: object
      description: Physical or mailing address.
      properties:
        addressLine1:
          type: string
          description: Primary street address.
        addressLine2:
          type: string
          description: Secondary address line (suite, apartment, etc.).
        city:
          type: string
          description: City name.
        stateOrProvince:
          type: string
          description: Two-letter state or province code.
          maxLength: 2
        postalCode:
          type: string
          description: Postal or ZIP code.
        country:
          type: string
          description: Two-letter ISO 3166-1 alpha-2 country code.
          maxLength: 2
    IndividualProfile:
      type: object
      description: Profile data for an individual Moov account.
      properties:
        name:
          $ref: '#/components/schemas/Name'
        email:
          type: string
          format: email
          description: Email address of the individual.
        phone:
          $ref: '#/components/schemas/Phone'
        address:
          $ref: '#/components/schemas/Address'
        birthDate:
          type: string
          format: date
          description: Date of birth in ISO 8601 format (YYYY-MM-DD).
        governmentID:
          $ref: '#/components/schemas/GovernmentID'
    Error:
      type: object
      description: Standard error response returned by the Moov API.
      properties:
        error:
          type: string
          description: Human-readable description of the error.
        code:
          type: string
          description: Machine-readable error code.
    AccountConnectionRequest:
      type: object
      description: Request to share an account connection with another Moov account.
      properties:
        partnerAccountID:
          type: string
          format: uuid
          description: The account ID of the partner to connect with.
    Name:
      type: object
      description: Full name of an individual.
      properties:
        firstName:
          type: string
          description: Given name.
        middleName:
          type: string
          description: Middle name or initial.
        lastName:
          type: string
          description: Family name.
        suffix:
          type: string
          description: Name suffix (e.g., Jr., Sr., III).
    IndustryCodes:
      type: object
      description: Industry classification codes for the business.
      properties:
        naics:
          type: string
          description: North American Industry Classification System code.
        sic:
          type: string
          description: Standard Industrial Classification code.
        mcc:
          type: string
          description: Merchant Category Code for card payment processing.
    TaxID:
      type: object
      description: Business tax identification number.
      properties:
        ein:
          type: object
          description: Employer Identification Number for US businesses.
          properties:
            number:
              type: string
              description: Full EIN. Only provided on write; masked on read.
              pattern: ^\d{9}$
    AccountVerification:
      type: object
      description: Identity verification status for a Moov account.
      properties:
        verificationStatus:
          type: string
          description: Current KYC/KYB verification status.
          enum:
          - unverified
          - pending
          - resubmit
          - review
          - verified
          - failed
  responses:
    BadRequest:
      description: The request was malformed or contained invalid parameters.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Authentication failed. Ensure a valid Bearer token is provided with the required scopes for this operation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: OAuth2 bearer token obtained from the /oauth2/token endpoint. Include in the Authorization header as "Bearer {token}".
externalDocs:
  description: Moov API Documentation
  url: https://docs.moov.io/api/