---
title: "Get offer fulfillment actions"
method: POST
path: "/api/v2/offers/fulfillment/actions"
tags: ["Offer Endpoints"]
---

# Get offer fulfillment actions

`POST /api/v2/offers/fulfillment/actions`

## Request

- Base URL: `https://api.opensea.io`
- URL: `https://api.opensea.io/api/v2/offers/fulfillment/actions`
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/opensea/apis/opensea-api/docs/api/v2/offers/fulfillment/actions/post.ts> (a function with typed inputs; its response is checked against the schema)

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.

## Request body

- FullfillmentDataRequest
  - `consideration` ConsiderationObject
    - `asset_contract_address` string, required
    - `token_id` string, required
  - `fulfiller` FulfillerObject, required
    - `address` string, required
  - `include_optional_creator_fees` boolean, nullable: Whether to include optional creator fees in the fulfillment. If creator fees are already required, this is a no-op. Defaults to false.
  - `offer` OfferObject, required
    - `chain` string, required
    - `hash` string, required
    - `protocol_address` string, required
  - `units_to_fill` integer, nullable: Optional quantity of units to fulfill; defaults to 1 for offers

## Response `200`

Offer fulfillment actions retrieved successfully

- FulfillmentActionsResponse: Response containing blockchain actions to execute to fulfill an order
  - `steps` JsonNode[], required: 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.
    - unknown

## Other responses

- `400`: 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`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `409`: Conflict
- `500`: Internal server error. Please open a support ticket so OpenSea can investigate.

## Changes

- **2026-11-03** `2c7935d84f90`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/opensea/apis/opensea-api/changes/api/v2/offers/fulfillment/actions/post.md)

---

[API](https://skmtc.dev/opensea/apis/opensea-api.md) - [All operations](https://skmtc.dev/opensea/apis/opensea-api/llms.txt) - [OpenAPI document](https://skmtc.dev/opensea/apis/opensea-api/revisions/2c7935d84f90?raw)
