---
title: "Create external account"
method: POST
path: "/core/external-accounts"
tags: ["External accounts"]
---

# Create external account

`POST /core/external-accounts`

## Request

- Base URL: `https://api.enterprise.sandbox.uphold.com`
- URL: `https://api.enterprise.sandbox.uphold.com/core/external-accounts`
- Auth: OAuth 2
  - Client credentials
  - Token URL: `/core/oauth2/token` scopes: `core.external-accounts:create`
- TypeScript: <https://skmtc.dev/uphold/apis/core-api/docs/core/external-accounts/post.ts> (a function with typed inputs; its response is checked against the schema)

Create an external account for the user.

## Headers

- `X-On-Behalf-Of` string
- `X-Uphold-User-Ip` union
  - string, ipv4
  - string, ipv6
- `X-Uphold-User-Agent` string
- `X-Uphold-User-Origin` string
- `X-Uphold-User-Country` string
- `X-Uphold-User-Subdivision` string
- `X-Uphold-User-City` string

## Request body

- union
  - object
    - `type` 'card', required: The type of the external account.
    - `label` string, required: The label of the external account.
    - `number` string, required: The number of the card.
    - `securityCode` string, required: The security code of the card.
    - `expiryDate` object, required
      - `month` integer, required: The expiry month of the card.
      - `year` integer, required: The expiry year of the card.
    - `metadata` Metadata
  - object
    - `type` 'bank', required: The type of the external account.
    - `asset` 'USD', required: The asset in which the external account is denominated.
    - `network` 'ach', required: The default network of the external account.
    - `label` string, required: The label of the external account.
    - `address` object, required: The address information.
      - `country` string, required: The country of the address.
      - `subdivision` string, required: The subdivision of the address.
      - `city` string, required: The city of the address.
      - `line1` string, required: The first line of the address.
      - `line2` string: The second line of the address.
      - `postalCode` string, required: The postal code of the address.
    - `routingNumber` string, required: The routing number of the bank account (ABA).
    - `accountNumber` string, required: The account number of the bank account.
    - `accountType` 'checking' | 'savings', required: The type of the bank account.
    - `metadata` Metadata
  - object
    - `type` 'crypto', required: The type of the external account.
    - `asset` string, required: The asset in which the external account is denominated.
    - `network` string, required: The default network of the external account.
    - `label` string, required: The label of the external account.
    - `address` string, required: The crypto address.
    - `reference` string: The additional identifier (e.g., destination tag, memo) required for some networks.
    - `metadata` Metadata

## Response `201`

External account created.

- object
  - `externalAccount` ExternalAccount, required
    - `id` string, uuid, required: The unique identifier of the external account.
    - `ownerId` string, uuid, required: The unique identifier of the user that owns the account.
    - `type` 'apm' | 'bank' | 'card' | 'crypto', required: The type of the external account.
    - `status` 'processing' | 'ok' | 'expired' | 'failed' | 'restricted' | 'blocked', required: The status of the external account.
    - `statusDetails` object: The details of the status of the external account.
      - `reason` 'card-data-invalid' | 'card-declined-by-bank' | 'card-expired' | 'card-permanently-declined-by-bank' | 'card-unauthorized' | 'card-unsupported' | 'bank-account-holder-name-mismatch' | 'velocity' | 'under-review' | 'unspecified-error', required: The reason why the external account is in its current status.
    - `label` string, required: The label of the external account.
    - `asset` string, required: The asset in which the external account is denominated.
    - `network` string: The network that the external account corresponds to.
    - `features` string[], required: The features of the external account.
    - `details` union, required: The details of the external account based on the type and network.
      - ExternalAccountDetailsCard
        - `type` 'credit' | 'debit': The type of the card, available if card was recognized.
        - `last4Digits` string, required: The last 4 digits of the card number.
        - `expiryDate` object, required: The expiry date of the card.
          - `month` integer, required: The expiry month of the card.
          - `year` integer, required: The expiry year of the card.
        - `octSupport` 'unknown' | 'supported' | 'unsupported', required: The support for Open Credit Transfer (withdrawals) for the card.
      - ExternalAccountDetailsBankAch
        - `address` Address, required: The address information.
          - `country` string: The country of the address.
          - `subdivision` string: The subdivision of the address.
          - `city` string: The city of the address.
          - `line1` string: The first line of the address.
          - `line2` string: The second line of the address.
          - `postalCode` string: The postal code of the address.
        - `routingNumber` string, required: The routing number of the bank account (ABA).
        - `accountNumber` string, required: The account number of the bank account.
        - `accountType` string, required: The type of the bank account.
        - `secondaryNetworks` object: The secondary networks that the external account can be used with, grouped by operation.
          - `deposit` string[]
          - `withdraw` string[]
      - ExternalAccountDetailsBankFps
        - `accountNumber` string, required: The account number of the bank account.
        - `sortCode` string, required: The sort code of the bank account.
      - ExternalAccountDetailsBankSepa
        - `bic` string, required: The bank account's BIC.
        - `iban` string, required: The IBAN.
      - ExternalAccountDetailsApm
        - `identifier` string, required: The identifier of the payment method account.
      - ExternalAccountDetailsCrypto
        - `address` string, required: The crypto address.
        - `reference` string: The additional identifier (e.g., destination tag, memo) for the address.
    - `createdAt` string, date-time, required: The time at which the external account was created.
    - `updatedAt` string, date-time, required: The last time at which the external account was updated.
    - `verifications` ExternalAccountVerification[]: The verification records for the external account.
      - `via` 'request-for-information', required: The method through which the verification is tracked.
      - `level` 'declared' | 'verified', required: The level of the verification.
      - `status` 'pending' | 'completed' | 'failed', required: The status of the verification.
      - `completedAt` string, date-time: The time at which the verification was completed.
  - `errors` object: Additional contextual errors that occurred while processing the request.
    - `metadata` object: Error related to metadata processing.
      - `code` string, required: A short string with a brief explanation about the code reported.
      - `message` string, required: A human-readable message providing more details.
      - `details` object: Additional information about the feedback reported.

## Other responses

- `400`: Bad Request.
- `401`: Unauthorized.
- `403`: Forbidden.
- `404`: Resource not found.
- `409`: Business logic error.
- `429`: Too Many Requests.

---

[API](https://skmtc.dev/uphold/apis/core-api.md) - [All operations](https://skmtc.dev/uphold/apis/core-api/llms.txt) - [OpenAPI document](https://skmtc.dev/uphold/apis/core-api/revisions/6c663575c57a?raw)
