> ## Documentation Index
> Fetch the complete documentation index at: https://docs.portalhq.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Create an external address

> Add an external blockchain address to receive alert webhook notifications for.
The address is validated for correct format based on the selected namespace.
Blackhole addresses (such as null or dead addresses) are rejected.

Supported namespaces:
- `eip155` — EVM-compatible addresses
- `solana` — Solana addresses




## OpenAPI

````yaml /openapi/custodian-api.yaml post /custodians/me/alerts/webhooks/external-addresses
openapi: 3.1.0
info:
  title: Portal Custodian API
  version: '3.0'
  description: >
    The Portal Custodian API provides endpoints for managing clients, building
    transactions,

    retrieving wallet data, managing delegations, alert webhooks, and gas
    sponsorship.

    All endpoints require authentication via a Portal API Key (also known as a
    Custodian API Key)

    passed as a Bearer token.


    ## Base URL

    `https://api.portalhq.io/api/v3`


    ## Authentication

    Include your Portal API Key as a Bearer token in the `Authorization` header
    of every request.


    ## Chain ID Format

    Chain parameters use either friendly names (e.g. `ethereum`, `solana`) or
    CAIP-2 format

    (e.g. `eip155:1`, `solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp`). When using
    CAIP-2 format

    in URLs, ensure the colon is URI-encoded (`%3A`).
servers:
  - url: https://api.portalhq.io/api/v3
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Clients
    description: Create and manage Portal clients
  - name: Transactions
    description: Build and evaluate blockchain transactions
  - name: Wallet Metadata
    description: Retrieve wallet balances and NFTs
  - name: Wallet Shares
    description: Manage backup shares and wallet ejection
  - name: Delegations
    description: Manage token delegations and delegated transfers
  - name: Session Keys
    description: Build and send EIP-7702 session key user operations
  - name: Alert Webhooks
    description: Manage alert webhooks, external addresses, and replay failed events
  - name: Gas Sponsorship
    description: View and manage gas sponsorship across chains
paths:
  /custodians/me/alerts/webhooks/external-addresses:
    post:
      tags:
        - Alert Webhooks
      summary: Create an external address
      description: >
        Add an external blockchain address to receive alert webhook
        notifications for.

        The address is validated for correct format based on the selected
        namespace.

        Blackhole addresses (such as null or dead addresses) are rejected.


        Supported namespaces:

        - `eip155` — EVM-compatible addresses

        - `solana` — Solana addresses
      operationId: createExternalAddress
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateExternalAddressRequest'
            example:
              address: '0x1234567890abcdef1234567890abcdef12345678'
              namespace: eip155
      responses:
        '201':
          description: External address created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalAddressResponse'
              example:
                data:
                  id: cm4voycw2001f68veade3tr0i
                  address: '0x1234567890abcdef1234567890abcdef12345678'
                  namespace: EIP155
                  createdAt: '2025-01-15T10:30:00.000Z'
                  updatedAt: '2025-01-15T10:30:00.000Z'
        '400':
          description: Bad request - invalid address format or blackhole address
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - invalid or missing authentication token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict - external address already exists for this environment
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    CreateExternalAddressRequest:
      type: object
      required:
        - address
        - namespace
      properties:
        address:
          type: string
          description: >-
            The blockchain address to monitor. Must be a valid address for the
            selected namespace.
        namespace:
          type: string
          enum:
            - eip155
            - solana
          description: |
            The blockchain namespace of the address.
            - `eip155` for EVM-compatible addresses
            - `solana` for Solana addresses
    ExternalAddressResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/ExternalAddress'
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Error message describing what went wrong
    ExternalAddress:
      type: object
      properties:
        id:
          type: string
        address:
          type: string
          description: The blockchain address being monitored.
        namespace:
          type: string
          enum:
            - eip155
            - solana
          description: The blockchain namespace of the address.
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: |
        Portal API Key (Custodian API Key). Pass as a Bearer token in the
        Authorization header.

````