OpenSea Account Endpoints API

Account endpoints to retrieve OpenSea account profiles and resolve identifiers

OpenAPI Specification

opensea-account-endpoints-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: OpenSea Account Endpoints API
  description: The API for OpenSea
  contact:
    name: OpenSea
    url: https://www.opensea.io
    email: contact@opensea.io
  version: 2.0.0
servers:
- url: https://api.opensea.io
  description: Production server
security:
- ApiKeyAuth: []
tags:
- name: Account Endpoints
  description: Account endpoints to retrieve OpenSea account profiles and resolve identifiers
paths:
  /api/v2/accounts/{address_or_username}:
    get:
      tags:
      - Account Endpoints
      summary: Get an OpenSea account profile
      description: Get an OpenSea Account Profile including details such as bio, social media usernames, and profile image.
      operationId: get_account
      parameters:
      - name: address_or_username
        in: path
        description: The blockchain address or username of the account to retrieve
        required: true
        schema:
          type: string
        example: 0x8ba1f109551bD432803012645Hac136c94C19D6e
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/AccountResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/v2/accounts/resolve/{identifier}:
    get:
      tags:
      - Account Endpoints
      summary: Resolve an account identifier
      description: Resolve an ENS name (e.g. vitalik.eth), OpenSea username, or wallet address to canonical account info including address, username, and ENS name. The ENS path performs both forward resolution (name → address) and reverse lookup (address → canonical primary name). The address and ENS paths perform enrichment calls (username + ENS reverse lookup) in parallel. The username path only needs an ENS reverse lookup after the initial resolution and runs it sequentially. The ENS and username paths require an extra initial call and may be slower than the address path on cache misses.
      operationId: resolve_account
      parameters:
      - name: identifier
        in: path
        description: An ENS name (e.g. vitalik.eth), OpenSea username, or wallet address to resolve
        required: true
        schema:
          type: string
          maxLength: 256
          minLength: 0
        example: vitalik.eth
      responses:
        '200':
          description: Resolved account info
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/AccountResolveResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/v2/account/{address}/portfolio:
    get:
      tags:
      - Account Endpoints
      summary: Get portfolio stats for an account
      description: Get portfolio analytics including total value, NFT/token breakdown, and P&L for a wallet address over a given timeframe.
      operationId: get_portfolio_stats
      parameters:
      - name: address
        in: path
        description: The wallet address
        required: true
        schema:
          type: string
        example: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
      - name: timeframe
        in: query
        description: 'Timeframe for P&L calculation: HOUR, DAY, WEEK, MONTH'
        required: false
        schema:
          type: string
          default: DAY
          description: Timeframe for portfolio analytics queries
          enum:
          - HOUR
          - DAY
          - WEEK
          - MONTH
      responses:
        '200':
          description: Portfolio stats
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PortfolioStatsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/v2/account/{address}/portfolio/history:
    get:
      tags:
      - Account Endpoints
      summary: Get portfolio net worth history for an account
      description: Get net worth time series data for a wallet address over a given timeframe.
      operationId: get_portfolio_history
      parameters:
      - name: address
        in: path
        description: The wallet address
        required: true
        schema:
          type: string
        example: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
      - name: timeframe
        in: query
        description: 'Timeframe for history: HOUR, DAY, WEEK, MONTH'
        required: false
        schema:
          type: string
          default: DAY
          description: Timeframe for portfolio analytics queries
          enum:
          - HOUR
          - DAY
          - WEEK
          - MONTH
      responses:
        '200':
          description: Portfolio history
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PortfolioHistoryResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/v2/account/{address}/offers_received:
    get:
      tags:
      - Account Endpoints
      summary: Get offers received by an account
      description: Get a paginated list of offers received on items owned by a wallet address.
      operationId: get_profile_offers_received
      parameters:
      - name: address
        in: path
        description: The wallet address
        required: true
        schema:
          type: string
        example: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
      - name: after
        in: query
        description: Cursor for pagination
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return
        required: false
        schema:
          type: integer
          format: int32
          default: 50
      - name: collection_slugs
        in: query
        description: Filter by collection slugs
        required: false
        schema:
          type: array
          items:
            type: string
      - name: chains
        in: query
        description: Filter by chains
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ChainIdentifier'
      - name: sort_by
        in: query
        description: Sort by field
        required: false
        schema:
          type: string
          default: START_TIME
          enum:
          - START_TIME
          - TOP_ASSET_OFFER
      - name: sort_direction
        in: query
        description: Sort direction
        required: false
        schema:
          type: string
          default: desc
          enum:
          - asc
          - desc
      responses:
        '200':
          description: Offers received for account
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/OffersResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/v2/account/{address}/offers:
    get:
      tags:
      - Account Endpoints
      summary: Get active offers made by an account
      description: Get a paginated list of active offers made by a wallet address.
      operationId: get_profile_offers
      parameters:
      - name: address
        in: path
        description: The wallet address
        required: true
        schema:
          type: string
        example: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
      - name: after
        in: query
        description: Cursor for pagination
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return
        required: false
        schema:
          type: integer
          format: int32
          default: 50
      - name: collection_slugs
        in: query
        description: Filter by collection slugs
        required: false
        schema:
          type: array
          items:
            type: string
      - name: chains
        in: query
        description: Filter by chains
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ChainIdentifier'
      - name: sort_by
        in: query
        description: Sort by field
        required: false
        schema:
          type: string
          default: START_TIME
          enum:
          - START_TIME
          - END_TIME
      - name: sort_direction
        in: query
        description: Sort direction
        required: false
        schema:
          type: string
          default: desc
          enum:
          - asc
          - desc
      responses:
        '200':
          description: Active offers for account
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/OffersResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/v2/account/{address}/listings:
    get:
      tags:
      - Account Endpoints
      summary: Get active listings for an account
      description: Get a paginated list of active listings created by a wallet address.
      operationId: get_profile_listings
      parameters:
      - name: address
        in: path
        description: The wallet address
        required: true
        schema:
          type: string
        example: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
      - name: after
        in: query
        description: Cursor for pagination
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return
        required: false
        schema:
          type: integer
          format: int32
          default: 50
      - name: collection_slugs
        in: query
        description: Filter by collection slugs
        required: false
        schema:
          type: array
          items:
            type: string
      - name: chains
        in: query
        description: Filter by chains
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ChainIdentifier'
      - name: sort_by
        in: query
        description: Sort by field
        required: false
        schema:
          type: string
          default: START_TIME
          enum:
          - START_TIME
          - END_TIME
      - name: sort_direction
        in: query
        description: Sort direction
        required: false
        schema:
          type: string
          default: desc
          enum:
          - asc
          - desc
      responses:
        '200':
          description: Active listings for account
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ListingsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/v2/account/{address}/favorites:
    get:
      tags:
      - Account Endpoints
      summary: Get items favorited by an account
      description: Get a paginated list of items favorited by a wallet address.
      operationId: get_profile_favorites
      parameters:
      - name: address
        in: path
        description: The wallet address
        required: true
        schema:
          type: string
        example: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
      - name: after
        in: query
        description: Cursor for pagination
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return
        required: false
        schema:
          type: integer
          format: int32
          default: 50
      - name: sort_by
        in: query
        description: Sort by field
        required: false
        schema:
          type: string
          default: CREATED_DATE
          enum:
          - CREATED_DATE
          - PRICE
          - RARITY
          - LISTING_CREATED_DATE
          - LAST_SALE
      - name: sort_direction
        in: query
        description: Sort direction
        required: false
        schema:
          type: string
          default: desc
          enum:
          - asc
          - desc
      - name: chains
        in: query
        description: Filter by chains
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ChainIdentifier'
          uniqueItems: true
      responses:
        '200':
          description: Favorited items
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/NftListResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/v2/account/{address}/collections:
    get:
      tags:
      - Account Endpoints
      summary: Get collections owned by an account
      description: Get a paginated list of collections owned by a wallet address, with ownership data.
      operationId: get_profile_collections
      parameters:
      - name: address
        in: path
        description: The wallet address
        required: true
        schema:
          type: string
        example: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
      - name: after
        in: query
        description: Cursor for pagination
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of results to return
        required: false
        schema:
          type: integer
          format: int32
          default: 50
      - name: chains
        in: query
        description: Filter by chains
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ChainIdentifier'
      responses:
        '200':
          description: Collections owned by account
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ProfileCollectionsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    Trait:
      type: object
      properties:
        trait_type:
          type: string
        display_type:
          type: string
        max_value:
          type: string
        value: {}
      required:
      - trait_type
      - value
    ListingPrice:
      type: object
      properties:
        current:
          $ref: '#/components/schemas/Price'
      required:
      - current
    CollectionInner:
      type: object
      properties:
        slug:
          type: string
      required:
      - slug
    PortfolioHistoryResponse:
      type: object
      description: Net worth time series data
      properties:
        data_points:
          type: array
          description: Time series data points
          items:
            $ref: '#/components/schemas/PortfolioHistoryDataPoint'
        timeframe:
          type: string
          description: The queried timeframe
          example: WEEK
      required:
      - data_points
      - timeframe
    PortfolioStatsResponse:
      type: object
      description: Portfolio stats including total value, P&L, and asset breakdown
      properties:
        total_value_usd:
          type: string
          description: Total portfolio value in USD
          example: 125430.5
        nft_value_usd:
          type: string
          description: NFT portfolio value in USD
          example: 98200
        token_value_usd:
          type: string
          description: Token portfolio value in USD
          example: 27230.5
        pnl_absolute:
          type: string
          description: Absolute P&L in USD over the timeframe
          example: '+1250.00'
        pnl_percentage:
          type: string
          description: Percentage P&L over the timeframe
          example: '+1.01'
        timeframe:
          type: string
          description: The queried timeframe
          example: WEEK
      required:
      - nft_value_usd
      - timeframe
      - token_value_usd
      - total_value_usd
    AccountResolveResponse:
      type: object
      description: Resolved account info
      properties:
        address:
          type: string
          description: The resolved wallet address
          example: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
        username:
          type: string
          description: OpenSea username, if available
        ens_name:
          type: string
          description: Primary ENS name, if available
          example: vitalik.eth
      required:
      - address
    SocialMediaAccount:
      type: object
      properties:
        platform:
          type: string
        username:
          type: string
      required:
      - platform
      - username
    Parameters:
      type: object
      properties:
        offerer:
          type: string
        offer:
          type: array
          items:
            $ref: '#/components/schemas/Item'
        consideration:
          type: array
          items:
            $ref: '#/components/schemas/ConsiderationItem'
        startTime:
          type: string
        endTime:
          type: string
        orderType:
          type: integer
          format: int32
        zone:
          type: string
        zoneHash:
          type: string
        salt:
          type: string
        conduitKey:
          type: string
        totalOriginalConsiderationItems:
          type: integer
          format: int32
        counter:
          type: integer
      required:
      - conduitKey
      - consideration
      - counter
      - endTime
      - offer
      - offerer
      - orderType
      - salt
      - startTime
      - totalOriginalConsiderationItems
      - zone
      - zoneHash
    AccountResponse:
      type: object
      properties:
        address:
          type: string
        username:
          type: string
        profile_image_url:
          type: string
        banner_image_url:
          type: string
        website:
          type: string
        social_media_accounts:
          type: array
          items:
            $ref: '#/components/schemas/SocialMediaAccount'
        bio:
          type: string
        joined_date:
          type: string
          format: date-time
      required:
      - address
      - bio
      - joined_date
      - social_media_accounts
    Item:
      type: object
      properties:
        itemType:
          type: integer
          format: int32
        token:
          type: string
        identifierOrCriteria:
          type: string
        startAmount:
          type: string
        endAmount:
          type: string
      required:
      - endAmount
      - identifierOrCriteria
      - itemType
      - startAmount
      - token
    ListingOrOffer: {}
    OrderAsset:
      type: object
      properties:
        identifier:
          type: string
        contract:
          type: string
      required:
      - contract
    NumericTraitData:
      type: object
      properties:
        type:
          type: string
        min:
          type: number
          format: float
        max:
          type: number
          format: float
      required:
      - type
    Contract:
      type: object
      properties:
        address:
          type: string
        chain:
          type: string
      required:
      - address
      - chain
    Price:
      type: object
      properties:
        currency:
          type: string
        decimals:
          type: integer
          format: int32
        value:
          type: string
      required:
      - currency
      - decimals
      - value
    ProfileCollectionResponse:
      type: object
      properties:
        collection:
          type: string
        name:
          type: string
        description:
          type: string
        image_url:
          type: string
        banner_image_url:
          type: string
        owner:
          type: string
        safelist_status:
          type: string
        category:
          type: string
        is_disabled:
          type: boolean
        is_nsfw:
          type: boolean
        trait_offers_enabled:
          type: boolean
        collection_offers_enabled:
          type: boolean
        opensea_url:
          type: string
        project_url:
          type: string
        wiki_url:
          type: string
        discord_url:
          type: string
        telegram_url:
          type: string
        twitter_username:
          type: string
        instagram_username:
          type: string
        contracts:
          type: array
          items:
            $ref: '#/components/schemas/Contract'
        item_count:
          type: integer
          format: int32
        total_quantity:
          type: integer
          format: int32
        usd_value:
          type: number
          format: double
      required:
      - collection
      - collection_offers_enabled
      - contracts
      - is_disabled
      - is_nsfw
      - item_count
      - name
      - opensea_url
      - safelist_status
      - total_quantity
      - trait_offers_enabled
    Offer:
      allOf:
      - $ref: '#/components/schemas/ListingOrOffer'
      - type: object
        properties:
          order_hash:
            type: string
          chain:
            type: string
          protocol_data:
            $ref: '#/components/schemas/ProtocolData'
          protocol_address:
            type: string
          asset:
            $ref: '#/components/schemas/OrderAsset'
          remaining_quantity:
            type: integer
            format: int64
          order_created_at:
            type: integer
            format: int64
          criteria:
            $ref: '#/components/schemas/Criteria'
          price:
            $ref: '#/components/schemas/Price'
          status:
            type: string
            enum:
            - ACTIVE
            - INACTIVE
            - FULFILLED
            - EXPIRED
            - CANCELLED
      required:
      - chain
      - order_hash
      - price
      - remaining_quantity
      - status
    Criteria:
      type: object
      properties:
        collection:
          $ref: '#/components/schemas/CollectionInner'
        contract:
          $ref: '#/components/schemas/ContractInner'
        traits:
          type: array
          items:
            $ref: '#/components/schemas/TraitData'
        numeric_traits:
          type: array
          items:
            $ref: '#/components/schemas/NumericTraitData'
        encoded_token_ids:
          type: string
    NftListResponse:
      type: object
      properties:
        nfts:
          type: array
          items:
            $ref: '#/components/schemas/Nft'
        next:
          type: string
      required:
      - nfts
    ListingsResponse:
      type: object
      properties:
        listings:
          type: array
          items:
            $ref: '#/components/schemas/Listing'
        next:
          type: string
      required:
      - listings
    TraitData:
      type: object
      properties:
        type:
          type: string
        value:
          type: string
      required:
      - type
      - value
    ProfileCollectionsResponse:
      type: object
      properties:
        collections:
          type: array
          items:
            $ref: '#/components/schemas/ProfileCollectionResponse'
        next:
          type: string
      required:
      - collections
    ChainIdentifier:
      type: string
      default: ethereum
      description: Blockchain chain identifier. Use the chain slug (e.g., 'ethereum', 'polygon', 'arbitrum', 'optimism', 'base')
      enum:
      - blast
      - base
      - ethereum
      - zora
      - arbitrum
      - sei
      - avalanche
      - polygon
      - optimism
      - ape_chain
      - flow
      - b3
      - soneium
      - ronin
      - bera_chain
      - solana
      - shape
      - unichain
      - gunzilla
      - abstract
      - animechain
      - hyperevm
      - somnia
      - monad
      - hyperliquid
      - megaeth
      - ink
      example: ethereum
    Nft:
      type: object
      properties:
        identifier:
          type: string
        collection:
          type: string
        contract:
          type: string
        token_standard:
          type: string
        name:
          type: string
        description:
          type: string
        image_url:
          type: string
        display_image_url:
          type: string
        display_animation_url:
          type: string
        metadata_url:
          type: string
        opensea_url:
          type: string
        updated_at:
          type: string
        is_disabled:
          type: boolean
        is_nsfw:
          type: boolean
        original_image_url:
          type: string
        original_animation_url:
          type: string
        traits:
          type: array
          items:
            $ref: '#/components/schemas/Trait'
      required:
      - collection
      - contract
      - identifier
      - is_disabled
      - is_nsfw
      - opensea_url
      - token_standard
      - traits
      - updated_at
    ConsiderationItem:
      type: object
      properties:
        itemType:
          type: integer
          format: int32
        token:
          type: string
        identifierOrCriteria:
          type: string
        startAmount:
          type: string
        endAmount:
          type: string
        recipient:
          type: string
      required:
      - endAmount
      - identifierOrCriteria
      - itemType
      - recipient
      - startAmount
      - token
    ContractInner:
      type: object
      properties:
        address:
          type: string
      required:
      - address
    PortfolioHistoryDataPoint:
      type: object
      description: A single net worth data point
      properties:
        timestamp:
          type: string
          format: date-time
          description: Timestamp of the data point
          example: '2026-04-28T00:00:00Z'
        value_usd:
          type: string
          description: Total portfolio value in USD
          example: 124180
        token_value_usd:
          type: string
          description: Token value in USD
          example: 26000
        nft_value_usd:
          type: string
          description: NFT value in USD
          example: 98180
      required:
      - nft_value_usd
      - timestamp
      - token_value_usd
      - value_usd
    ProtocolData:
      type: object
      properties:
        parameters:
          $ref: '#/components/schemas/Parameters'
        signature:
          type: string
      required:
      - parameters
    OffersResponse:
      type: object
      properties:
        offers:
          type: array
          items:
            $ref: '#/components/schemas/Offer'
        next:
          type: string
      required:
      - offers
    Listing:
      allOf:
      - $ref: '#/components/schemas/ListingOrOffer'
      - type: object
        properties:
          order_hash:
            type: string
          chain:
            type: string
          protocol_data:
            $ref: '#/components/schemas/ProtocolData'
          protocol_address:
            type: string
          asset:
            $ref: '#/components/schemas/OrderAsset'
          remaining_quantity:
            type: integer
            format: int64
          order_created_at:
            type: integer
            format: int64
          price:
            $ref: '#/components/schemas/ListingPrice'
          type:
            type: string
          status:
            type: string
            enum:
            - ACTIVE
            - INACTIVE
            - FULFILLED
            - EXPIRED
            - CANCELLED
      required:
      - chain
      - order_hash
      - price
      - remaining_quantity
      - status
      - type
  responses:
    NotFound:
      description: Resource not found
    BadRequest:
      description: For error reasons, review the response data.
    InternalError:
      description: Internal server error. Please open a support ticket so OpenSea can investigate.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      description: API key required for authentication
      name: x-api-key
      in: header
x-tagGroups:
- name: Data & Discovery
  tags:
  - Chain Endpoints
  - Account Endpoints
  - Collection Endpoints
  - NFT Endpoints
  - Contract Endpoints
  - Token Endpoints
  - Search Endpoints
- name: Marketplace & Trading
  tags:
  - Listing Endpoints
  - Offer Endpoints
  - Order Endpoints
  - Swap Endpoints
  - Drops Endpoints
- name: Analytics & Events
  tags:
  - Analytics Endpoints
- name: Tools [Beta]
  tags:
  - Tool Endpoints [Beta]
- name: Transactions
  tags:
  - Transaction Endpoints