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

# Upload NFT token metadata

> Uploads metadata JSON to S3 for one or more tokens on a deployed contract. Requires contract ownership via the wallet header.

<Info>
  ### Related docs: [Managing Onchain Wallets](/docs/managing-onchain-wallets)
</Info>

## Node.js SDK

🔗 **SDK Method:** [uploadTokenMetadata](/nodejs-sdk/onchain-apis/uploadTokenMetadata)

Use this API endpoint with the Neynar Node.js SDK for typed responses and better developer experience.


## OpenAPI

````yaml post /v2/farcaster/nft/metadata/token
openapi: 3.0.4
info:
  contact:
    email: team@neynar.com
    name: Neynar
    url: https://neynar.com/
  description: >-
    The Neynar API allows you to interact with the Farcaster protocol among
    other things. See the [Neynar docs](https://docs.neynar.com/reference) for
    more details.
  title: Neynar API
  version: 3.173.0
servers:
  - url: https://api.neynar.com
security:
  - ApiKeyAuth: []
tags:
  - description: Operations related to user
    externalDocs:
      description: More info about user
      url: https://docs.neynar.com/reference/user-operations
    name: User
  - description: Operations related to signer
    externalDocs:
      description: More info about signer
      url: https://docs.neynar.com/reference/signer-operations
    name: Signer
  - description: Operations related to cast
    externalDocs:
      description: More info about cast
      url: https://docs.neynar.com/reference/cast-operations
    name: Cast
  - description: Operations related to feed
    externalDocs:
      description: More info about feed
      url: https://docs.neynar.com/reference/feed-operations
    name: Feed
  - description: Operations related to reaction
    externalDocs:
      description: More info about reaction
      url: https://docs.neynar.com/reference/reaction-operations
    name: Reaction
  - description: Operations related to notifications
    externalDocs:
      description: More info about notifications
      url: https://docs.neynar.com/reference/notifications-operations
    name: Notifications
  - description: Operations related to channels
    externalDocs:
      description: More info about channels
      url: https://docs.neynar.com/reference/channel-operations
    name: Channel
  - description: Operations related to follows
    externalDocs:
      description: More info about follows
      url: https://docs.neynar.com/reference/follows-operations
    name: Follows
  - description: Operations related to storage
    externalDocs:
      description: More info about storage
      url: https://docs.neynar.com/reference/storage-operations
    name: Storage
  - description: Operations related to mini apps
    name: Frame
  - description: Operations for building AI agents
    name: Agents
  - description: Operations related to fname
    name: fname
  - description: Operations related to a webhook
    name: Webhook
  - description: >-
      Securely communicate and perform actions on behalf of users across
      different apps
    externalDocs:
      description: More info about farcaster actions
      url: https://docs.neynar.com/docs/farcaster-actions-spec
    name: Action
  - description: Operations related to a subscriptions
    name: Subscribers
  - description: Operations related to a mute
    name: Mute
  - description: Operations related to a block
    name: Block
  - description: Operations related to a ban
    name: Ban
  - description: Operations related to onchain data
    name: Onchain
  - description: Operations related to login
    name: Login
  - description: Operations related to retrieving metrics
    name: Metrics
  - description: Operations related to mini app host notifications
    externalDocs:
      description: More info about mini app host notifications
      url: https://docs.neynar.com/docs/app-host-notifications
    name: App Host
paths:
  /v2/farcaster/nft/metadata/token:
    post:
      tags:
        - Onchain
      summary: Upload NFT token metadata
      description: >-
        Uploads metadata JSON to S3 for one or more tokens on a deployed
        contract. Requires contract ownership via the wallet header.
      operationId: upload-token-metadata
      parameters:
        - $ref: '#/components/parameters/WalletIdHeader'
      requestBody:
        content:
          application/json:
            schema:
              properties:
                contract_address:
                  description: Ethereum address
                  example: '0x5a927ac639636e534b678e81768ca19e2c6280b7'
                  pattern: ^0x[a-fA-F0-9]{40}$
                  title: EthAddress
                  type: string
                network:
                  enum:
                    - base
                    - optimism
                    - base-sepolia
                  type: string
                tokens:
                  items:
                    properties:
                      metadata:
                        properties:
                          animation_url:
                            type: string
                          attributes:
                            items:
                              properties:
                                display_type:
                                  enum:
                                    - number
                                    - boost_number
                                    - boost_percentage
                                    - date
                                  type: string
                                max_value:
                                  type: number
                                trait_type:
                                  type: string
                                value:
                                  oneOf:
                                    - type: string
                                    - type: number
                              required:
                                - trait_type
                                - value
                              type: object
                            type: array
                          background_color:
                            pattern: ^[0-9a-fA-F]{6}$
                            type: string
                          description:
                            type: string
                          external_url:
                            type: string
                          image:
                            type: string
                          name:
                            type: string
                          youtube_url:
                            type: string
                        required:
                          - name
                          - image
                        type: object
                      token_id:
                        type: string
                    required:
                      - token_id
                      - metadata
                    type: object
                  maxItems: 200
                  minItems: 1
                  type: array
              required:
                - network
                - contract_address
                - tokens
              type: object
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  tokens:
                    items:
                      oneOf:
                        - properties:
                            token_id:
                              type: string
                            uri:
                              type: string
                          required:
                            - token_id
                            - uri
                          type: object
                        - properties:
                            error:
                              type: string
                            token_id:
                              type: string
                          required:
                            - token_id
                            - error
                          type: object
                    type: array
                required:
                  - tokens
                type: object
          description: Success
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ZodError'
          description: Bad Request
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorRes'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorRes'
          description: Resource not found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorRes'
          description: Server Error
      externalDocs:
        url: https://docs.neynar.com/reference/upload-token-metadata
components:
  parameters:
    WalletIdHeader:
      description: Wallet ID to use for transactions
      in: header
      name: x-wallet-id
      required: true
      schema:
        type: string
      x-is-global-header: true
  schemas:
    ZodError:
      properties:
        code:
          example: InvalidField
          type: string
        errors:
          items:
            properties:
              code:
                type: string
              expected:
                type: string
              message:
                type: string
              path:
                items:
                  type: string
                type: array
              received:
                type: string
            required:
              - code
              - expected
              - received
              - path
              - message
            type: object
          type: array
        message:
          example: Invalid query parameters
          type: string
      required:
        - message
        - code
        - errors
      title: ZodError
      type: object
    ErrorRes:
      description: Details for the error response
      properties:
        code:
          type: string
        message:
          type: string
        property:
          type: string
        status:
          format: int32
          type: integer
      required:
        - message
      title: ErrorRes
      type: object
  securitySchemes:
    ApiKeyAuth:
      description: API key to authorize requests
      in: header
      name: x-api-key
      type: apiKey
      x-default: NEYNAR_API_DOCS

````