---
updatedAt: 2026-08-31T18:02:56.000Z
agentTools:
  projectIndex: https://docs.opensea.io/llms.txt
---

# Get offer fulfillment actions

Returns the blockchain actions a seller needs to accept an offer, for offers that cannot be accepted with Seaport calldata. A Solana offer is always accepted this way, because it settles through an onchain program rather than a signed order. The offer is addressed by the same identifier the get-order endpoint uses, and a criteria offer additionally requires a consideration naming the token being sold.

On Solana two fields on the returned action are load-bearing. When `partially_signed_transaction` is present the transaction is already cosigned: append your signature to those exact bytes and broadcast them, and do not rebuild the message from `instructions`, which invalidates the cosigner signature. When `sponsored_fee_payer` is present an OpenSea relayer pays the fee and your wallet is only a co-signer; when it is absent you pay your own fee.

Accepting fewer units than an offer's remaining quantity leaves the offer live, so a successful fill does not imply the offer is consumed.

# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "OpenSea 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": "OpenSea API server"
    }
  ],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "tags": [
    {
      "name": "Offer Endpoints",
      "description": "Offer endpoints for building, creating, fulfilling, and querying offers"
    }
  ],
  "paths": {
    "/api/v2/offers/fulfillment/actions": {
      "post": {
        "tags": [
          "Offer Endpoints"
        ],
        "summary": "Get offer fulfillment actions",
        "description": "Returns the blockchain actions a seller needs to accept an offer, for offers that cannot be accepted with Seaport calldata. A Solana offer is always accepted this way, because it settles through an onchain program rather than a signed order. The offer is addressed by the same identifier the get-order endpoint uses, and a criteria offer additionally requires a consideration naming the token being sold.\n\nOn Solana two fields on the returned action are load-bearing. When `partially_signed_transaction` is present the transaction is already cosigned: append your signature to those exact bytes and broadcast them, and do not rebuild the message from `instructions`, which invalidates the cosigner signature. When `sponsored_fee_payer` is present an OpenSea relayer pays the fee and your wallet is only a co-signer; when it is absent you pay your own fee.\n\nAccepting fewer units than an offer's remaining quantity leaves the offer live, so a successful fill does not imply the offer is consumed.",
        "operationId": "create_offer_fulfillment_actions",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FullfillmentDataRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Offer fulfillment actions retrieved successfully",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/FulfillmentActionsResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request is invalid. Possible reasons: order not found, order not valid, order is not an offer, consideration missing for a criteria offer, or no actions could be composed."
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorWrapper"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorWrapper"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorWrapper"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/V1ErrorWrapper"
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "V1ErrorWrapper": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "errors"
        ]
      },
      "JsonNode": {},
      "ConsiderationObject": {
        "type": "object",
        "properties": {
          "asset_contract_address": {
            "type": "string"
          },
          "token_id": {
            "type": "string"
          }
        },
        "required": [
          "asset_contract_address",
          "token_id"
        ]
      },
      "FulfillerObject": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string"
          }
        },
        "required": [
          "address"
        ]
      },
      "FullfillmentDataRequest": {
        "type": "object",
        "properties": {
          "consideration": {
            "$ref": "#/components/schemas/ConsiderationObject"
          },
          "fulfiller": {
            "$ref": "#/components/schemas/FulfillerObject"
          },
          "include_optional_creator_fees": {
            "type": [
              "boolean",
              "null"
            ],
            "default": false,
            "description": "Whether to include optional creator fees in the fulfillment. If creator fees are already required, this is a no-op. Defaults to false."
          },
          "offer": {
            "$ref": "#/components/schemas/OfferObject"
          },
          "units_to_fill": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "Optional quantity of units to fulfill; defaults to 1 for offers"
          }
        },
        "required": [
          "fulfiller",
          "offer"
        ]
      },
      "OfferObject": {
        "type": "object",
        "properties": {
          "chain": {
            "type": "string"
          },
          "hash": {
            "type": "string"
          },
          "protocol_address": {
            "type": "string"
          }
        },
        "required": [
          "chain",
          "hash",
          "protocol_address"
        ]
      },
      "FulfillmentActionsResponse": {
        "type": "object",
        "description": "Response containing blockchain actions to execute to fulfill an order",
        "properties": {
          "steps": {
            "type": "array",
            "description": "Ordered list of blockchain actions to execute. May include approval actions (e.g. setApprovalForAll) and a createListingsAction containing the Seaport order to sign. Serialized using proto3 JSON format — fields with default values (empty string, 0, false) may be omitted.",
            "items": {
              "$ref": "#/components/schemas/JsonNode"
            }
          }
        },
        "required": [
          "steps"
        ]
      }
    },
    "responses": {
      "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"
      ]
    },
    {
      "name": "Authentication",
      "tags": [
        "Auth Endpoints"
      ]
    }
  ]
}
```