Veem Public API

REST API for Veem's global payments network - create and verify business accounts, link bank accounts, send claimless payments, request money with invoices, quote exchange rates, manage multi-currency and crypto wallets, and register webhook callbacks. OAuth 2.0 (two- and three-legged), URI-path versioned (current v1.2), with a dedicated IP-whitelisted sandbox.

OpenAPI Specification

veem-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  description: Veem REST API
  title: Veem API v1.2
  version: v1.2.1
servers:
- url: //sandbox-api.veem.com
tags:
- description: Bank Account Controller
  name: bank-account-controller
- description: For managing crypto wallets, including balances, details, transactions and pay-ins
  name: crypto-wallet-controller
- description: Invoice Controller
  name: invoice-controller
- description: Payment Controller
  name: payment-controller
- description: Open Account Controller
  name: open-account-controller
- description: Beneficial Owner Information Controller
  name: beneficial-owner-information-controller
- description: Claimless Payment Controller
  name: claimless-payment-controller
- description: Contact Controller
  name: contact-controller
- description: Webhook Controller
  name: webhook-controller
- description: Attachment Controller
  name: attachment-controller
- description: Meta Controller
  name: meta-controller
- description: Wallet Controller
  name: wallet-controller
- description: Exchange Rate Controller
  name: exchange-rate-controller
- description: Customer Controller
  name: customer-controller
paths:
  /veem/v1.2/account/bank-account:
    post:
      deprecated: false
      operationId: addBankAccountUsingPOST
      requestBody:
        $ref: '#/components/requestBodies/BankAccountRequest'
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankAccountResponse'
          description: Created
      summary: addBankAccount
      tags:
      - bank-account-controller
  /veem/v1.2/crypto-wallet/applications/{applicationId}/add-currency:
    post:
      deprecated: false
      description: Provisions an additional currency or route for an existing crypto wallet application.
      operationId: addCryptoWalletApplicationCurrency
      parameters:
      - description: Unique identifier of the crypto wallet application.
        in: path
        name: applicationId
        required: true
        schema:
          format: int64
          type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CryptoWalletAddCurrencyRequest'
        description: Currency details to add to the application
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CryptoWalletProvisionResponse'
          description: Currency added to crypto wallet application successfully
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Invalid request body
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Unauthorized, the token is invalid or expired
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Forbidden, the token owner doesn't have permission to operate this API
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Internal Server Error, see the error code and API doc for reference
      summary: Add a currency to a crypto wallet application
      tags:
      - crypto-wallet-controller
  /veem/v1.2/invoices/{invoiceId}/approve:
    post:
      deprecated: false
      description: approve an invoice
      operationId: approveInvoiceUsingPOST_2
      parameters:
      - description: invoiceId
        in: path
        name: invoiceId
        required: true
        schema:
          format: int64
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceResponse'
          description: Success, an approved invoice object is returned
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unauthorized, the token is invalid or expired
        '401':
          description: Unauthorized, the token is invalid or expired
        '403':
          description: Forbidden, the token owner doesn't have permission to operate current API
        '404':
          description: Not Found, the resource not found
        '500':
          description: Internal Server Error, see the error code and API doc for reference
      summary: approveInvoice
      tags:
      - invoice-controller
  /veem/v1.2/payments/{paymentId}/approve:
    post:
      deprecated: false
      description: approve a payment
      operationId: approvePaymentUsingPOST_2
      parameters:
      - description: paymentId
        in: path
        name: paymentId
        required: true
        schema:
          format: int64
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentResponse'
          description: Success, an approved payment object is returned
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unauthorized, the token is invalid or expired
        '401':
          description: Unauthorized, the token is invalid or expired
        '403':
          description: Forbidden, the token owner doesn't have permission to operate current API
        '404':
          description: Not Found, the resource not found
        '500':
          description: Internal Server Error, see the error code and API doc for reference
      summary: approvePayment
      tags:
      - payment-controller
  /veem/v1.2/invoices/{invoiceId}/cancel:
    post:
      deprecated: false
      description: cancel an invoice
      operationId: cancelInvoiceUsingPOST_2
      parameters:
      - description: invoiceId
        in: path
        name: invoiceId
        required: true
        schema:
          format: int64
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceResponse'
          description: Success, a cancelled invoice object is returned
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unauthorized, the token is invalid or expired
        '401':
          description: Unauthorized, the token is invalid or expired
        '403':
          description: Forbidden, the token owner doesn't have permission to operate current API
        '404':
          description: Not Found, the resource not found
        '500':
          description: Internal Server Error, see the error code and API doc for reference
      summary: cancelInvoice
      tags:
      - invoice-controller
  /veem/v1.2/account:
    post:
      deprecated: false
      operationId: createAccountUsingPOST
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OpenAccountRequest'
        description: request
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SetUpAccountResponse'
          description: Created
      summary: createAccount
      tags:
      - open-account-controller
  /veem/v1.2/beneficial-ownership:
    post:
      deprecated: false
      operationId: createBoiUsingPOST
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BOIRequest'
        description: boiRequest
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BeneficialOwnerResponse'
          description: Created
      summary: createBoi
      tags:
      - beneficial-owner-information-controller
    get:
      deprecated: false
      operationId: getBoiUsingGET
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BeneficialOwnerResponse'
          description: OK
      summary: getBoi
      tags:
      - beneficial-owner-information-controller
  /veem/v1.2/claimless-payments:
    post:
      deprecated: false
      description: Creates a pay direct payment to the payee's (receiver's) bank account
      operationId: createClaimLessPaymentUsingPOST
      requestBody:
        $ref: '#/components/requestBodies/PaymentRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentResponse'
          description: Success, a payment is created in Veem
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentResponse'
          description: Created
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unauthorized, the token is invalid or expired
        '401':
          description: Unauthorized, the token is invalid or expired
        '403':
          description: Forbidden, the token owner doesn't have permission to operate current API
        '404':
          description: Not Found, the resource not found
        '500':
          description: Internal Server Error, see the error code and API doc for reference
      summary: createClaimlessPayment
      tags:
      - claimless-payment-controller
  /veem/v1.2/contacts/batch:
    post:
      deprecated: false
      description: Create multiple contacts in a batch
      operationId: createContactsUsingPOST_2
      parameters:
      - description: includeItems
        in: query
        name: includeItems
        required: false
        schema:
          default: false
          type: boolean
      requestBody:
        content:
          application/json:
            schema:
              items:
                $ref: '#/components/schemas/ContactBatchItemRequest'
              type: array
        description: request
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchResponse'
          description: Request data validated, processing started
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Invalid request data, no requests were processed
        '401':
          description: Unauthorized, the token is invalid or expired
        '403':
          description: Forbidden, the token owner lacks permission to operate the current API
        '404':
          description: Not Found, the resource not found
        '500':
          description: Internal Server Error, see the error code and API doc for reference
      summary: createContacts
      tags:
      - contact-controller
  /veem/v1.2/contacts:
    post:
      deprecated: false
      description: Create a contact in a batch
      operationId: createContactUsingPOST_2
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactRequest'
        description: request
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactResponse'
          description: New contact was successfully created and returned
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactResponse'
          description: Created
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Invalid request data, no requests were processed
        '401':
          description: Unauthorized, the token is invalid or expired
        '403':
          description: Forbidden, the token owner lacks permission to operate the current API
        '404':
          description: Not Found, the resource not found
        '500':
          description: Internal Server Error, see the error code and API doc for reference
      summary: createContact
      tags:
      - contact-controller
    get:
      deprecated: false
      description: Get a page of account contacts by email address, first,last name, batchId, and business name
      operationId: getContactsUsingGET_2
      parameters:
      - description: batchId
        in: query
        name: batchId
        required: false
        schema:
          format: int64
          type: integer
      - description: batchItemIds
        explode: true
        in: query
        name: batchItemIds
        required: false
        schema:
          items:
            format: int64
            type: integer
          type: array
      - description: businessName
        in: query
        name: businessName
        required: false
        schema:
          type: string
      - description: email
        in: query
        name: email
        required: false
        schema:
          type: string
      - description: firstName
        in: query
        name: firstName
        required: false
        schema:
          type: string
      - description: lastName
        in: query
        name: lastName
        required: false
        schema:
          type: string
      - description: pageNumber
        in: query
        name: pageNumber
        required: false
        schema:
          default: 0
          format: int32
          type: integer
      - description: pageSize
        in: query
        name: pageSize
        required: false
        schema:
          default: 20
          format: int32
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ContactResponse'
                type: array
          description: Success, all matching contacts were returned
        '400':
          description: Request failed, invalid search parameters
        '401':
          description: Unauthorized, the token is invalid or expired
        '403':
          description: Forbidden, the token owner lacks permission to operate the current API
        '404':
          description: Not Found, the resource not found
        '500':
          description: Internal Server Error, see the error code and API doc for reference
      summary: getContacts
      tags:
      - contact-controller
  /veem/v1.2/crypto-wallet/applications:
    post:
      deprecated: false
      description: Creates a new crypto wallet application.
      operationId: createCryptoWalletApplication
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CryptoWalletApplicationRequest'
        description: Crypto wallet application details
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CryptoWalletApplicationResponse'
          description: Crypto wallet application created successfully
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Invalid request body
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Unauthorized, the token is invalid or expired
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Forbidden, the token owner doesn't have permission to operate this API
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Internal Server Error, see the error code and API doc for reference
      summary: Create a crypto wallet application
      tags:
      - crypto-wallet-controller
  /veem/v1.0/payments/cryptowallet/payin:
    post:
      deprecated: false
      description: Creates deposit instructions for moving funds to a crypto wallet externally.
      operationId: createCryptoWalletPayin
      parameters:
      - description: Identifier of the account the pay-in is created on behalf of.
        in: query
        name: onBehalfAccountId
        required: false
        schema:
          format: int64
          type: integer
      requestBody:
        $ref: '#/components/requestBodies/PayinRequest'
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicInvoiceResponseCryptoWallet'
          description: Success, a crypto wallet pay-in is created in Veem
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unauthorized, the token is invalid or expired
        '401':
          description: Unauthorized, the token is invalid or expired
        '403':
          description: Forbidden, the token owner doesn't have permission to operate current API
        '404':
          description: Not Found, the resource not found
        '500':
          description: Internal Server Error, see the error code and API doc for reference
      summary: Create a Crypto Wallet pay-in
      tags:
      - payment-controller
  /veem/v1.0/payments/cryptowallet/payout:
    post:
      deprecated: false
      description: Withdraw Crypto Wallet funds to an external address, creating a payment.
      operationId: createCryptoWalletPayout
      parameters:
      - description: Identifier of the account the payout is created on behalf of.
        in: query
        name: onBehalfAccountId
        required: false
        schema:
          format: int64
          type: integer
      requestBody:
        $ref: '#/components/requestBodies/PayoutRequest'
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicInvoiceResponseCryptoWallet'
          description: Success, a crypto wallet payout is created in Veem
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unauthorized, the token is invalid or expired
        '401':
          description: Unauthorized, the token is invalid or expired
        '403':
          description: Forbidden, the token owner doesn't have permission to operate current API
        '404':
          description: Not Found, the resource not found
        '500':
          description: Internal Server Error, see the error code and API doc for reference
      summary: Create a Crypto Wallet payout
      tags:
      - payment-controller
  /veem/v1.2/invoices:
    post:
      deprecated: false
      description: posts an invoice and sends to receiver
      operationId: createInvoiceUsingPOST_2
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InvoiceRequest'
        description: request
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceResponse'
          description: Success, an invoice is created in Veem
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceResponse'
          description: Created
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unauthorized, the token is invalid or expired
        '401':
          description: Unauthorized, the token is invalid or expired
        '403':
          description: Forbidden, the token owner doesn't have permission to operate current API
        '404':
          description: Not Found, the resource not found
        '500':
          description: Internal Server Error, see the error code and API doc for reference
      summary: createInvoice
      tags:
      - invoice-controller
  /veem/v1.2/account/{accountId}/setting:
    post:
      deprecated: false
      description: Creates or updates account settings for a specific account
      operationId: createOrUpdateAccountSettingsUsingPOST
      parameters:
      - description: The account ID
        in: path
        name: accountId
        required: true
        schema:
          format: int64
          type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicAccountSettingsRequest'
        description: Account settings request
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicAccountSettingResponse'
          description: Success, account settings have been created or updated
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Bad Request, invalid request data
        '401':
          description: Unauthorized, the token is invalid or expired
        '403':
          description: Forbidden, the token owner doesn't have permission to operate current API
        '404':
          description: Not Found, the resource not found
        '500':
          description: Internal Server Error, see the error code and API doc for reference
      summary: createOrUpdateAccountSettings
      tags:
      - open-account-controller
  /veem/v1.2/payments:
    post:
      deprecated: false
      description: post a payment and sends to receiver
      operationId: createPaymentUsingPOST_2
      requestBody:
        $ref: '#/components/requestBodies/PaymentRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentResponse'
          description: Success, a payment is created in Veem
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentResponse'
          description: Created
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unauthorized, the token is invalid or expired
        '401':
          description: Unauthorized, the token is invalid or expired
        '403':
          description: Forbidden, the token owner doesn't have permission to operate current API
        '404':
          description: Not Found, the resource not found
        '500':
          description: Internal Server Error, see the error code and API doc for reference
      summary: createPayment
      tags:
      - payment-controller
  /veem/v1.2/webhooks:
    post:
      deprecated: false
      description: Creates a webhook configuration for the account and platform associated with the provided authorization token
      operationId: createWebhookUsingPOST_2
      requestBody:
        $ref: '#/components/requestBodies/WebhookRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookResponse'
          description: Success, the webhook configuration was created and returned.
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookResponse'
          description: Created
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Invalid request body
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Unauthorized, the token is invalid or expired
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Forbidden, the token owner doesn't have permission to operate this API
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Internal Server Error, see the error code and API doc for reference
      summary: Create webhook
      tags:
      - webhook-controller
    get:
      deprecated: false
      description: Gets all active webhook configurations for the account and platform associated with the provided authorization token.
      operationId: getWebhooksUsingGET_2
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/WebhookResponse'
                type: array
          description: Success, all active webhook configurations were returned.
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Unauthorized, the token is invalid or expired
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Forbidden, the token owner doesn't have permission to operate this API
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Internal Server Error, see the error code and API doc for reference
      summary: Get webhooks
      tags:
      - webhook-controller
  /veem/v1.2/webhooks/{webhookId}:
    delete:
      deprecated: false
      description: Deletes the webhook configuration with the specified ID if it is owned by the account and platform associated with the provided authorization token
      operationId: deleteWebhookUsingDELETE_2
      parameters:
      - description: webhookId
        in: path
        name: webhookId
        required: true
        schema:
          format: int64
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookResponse'
          description: Success, the webhook configuration was deleted and returned.
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Unauthorized, the token is invalid or expired
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Forbidden, the token owner doesn't have permission to operate this API
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: A webhook configuration with the specified ID was not found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Internal Server Error, see the error code and API doc for reference
      summary: Delete webhook
      tags:
      - webhook-controller
    get:
      deprecated: false
      description: Gets the webhook configuration with the specified ID if it is owned by the account and platform associated with the provided authorization token.
      operationId: getWebhookUsingGET_2
      parameters:
      - description: webhookId
        in: path
        name: webhookId
        required: true
        schema:
          format: int64
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookResponse'
          description: Success, the webhook configuration was returned.
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Unauthorized, the token is invalid or expired
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Forbidden, the token owner doesn't have permission to operate this API
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: A webhook configuration with the specified ID was not found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Internal Server Error, see the error code and API doc for reference
      summary: Get webhook
      tags:
      - webhook-controller
    patch:
      deprecated: false
      description: Updates the webhook configuration with the specified ID if it is owned by the account and platform associated with the provided authorization token
      operationId: updateWebhookUsingPATCH_2
      parameters:
      - description: webhookId
        in: path
        name: webhookId
        required: true
        schema:
          format: int64
          type: integer
      requestBody:
        $ref: '#/components/requestBodies/WebhookRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookResponse'
          description: Success, the webhook configuration was updated and returned.
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Invalid request body
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Unauthorized, the token is invalid or expired
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Forbidden, the token owner doesn't have permission to operate this API
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: A webhook configuration with the specified ID was not found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeemErrorResponse'
          description: Internal Server Error, see the error code and API doc for reference
      summary: Update webhook
      tags:
      - webhook-controller
  /veem/v1.2/attachments:
    get:
      deprecated: false
      operationId: downloadAttachmentUsingGET_2
      parameters:
      - allowEmptyValue: false
        description: The file name from the upload response
        in: query
        name: name
        required: false
        schema:
          typ

# --- truncated at 32 KB (236 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/veem/refs/heads/main/openapi/veem-api-openapi.yml