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

# Create a stock location

> Creates a new stock location.

Setting `default: true` automatically demotes the previous default
location.


**Required scope:** `write_settings` (for API-key authentication).



## OpenAPI

````yaml /api-reference/admin.yaml post /api/v3/admin/stock_locations
openapi: 3.0.3
info:
  title: Admin API
  contact:
    name: Spree Commerce
    url: https://spreecommerce.org
    email: hello@spreecommerce.org
  description: >
    Spree Admin API v3 - Administrative API for managing products, orders, and
    store settings.


    ## Authentication


    The Admin API requires a secret API key passed in the `x-spree-api-key`
    header.

    Secret API keys can be generated in the Spree admin dashboard.


    ## Response Format


    All responses are JSON. List endpoints return paginated responses with
    `data` and `meta` keys.

    Single resource endpoints return a flat JSON object.


    ## Resource IDs


    Every resource is identified by an opaque string ID (e.g. `prod_86Rf07xd4z`,

    `variant_k5nR8xLq`, `or_UkLWZg9DAJ`). Use these IDs everywhere — URL paths,

    request bodies, and Ransack filters all accept them directly.


    ## Error Handling


    Errors return a consistent format:

    ```json

    {
      "error": {
        "code": "validation_error",
        "message": "Validation failed",
        "details": { "name": ["can't be blank"] }
      }
    }

    ```
  version: v3
servers:
  - url: http://{defaultHost}
    variables:
      defaultHost:
        default: localhost:3000
security: []
tags:
  - name: Authentication
    description: Admin user authentication
  - name: Product Catalog
    description: Products, variants, and option types
  - name: Orders
    description: >-
      Order management — orders, items, payments, fulfillments, refunds, gift
      cards, store credits
  - name: Customers
    description: Customer management — profiles, addresses, store credits, credit cards
  - name: Configuration
    description: Store configuration — payment methods, tag autocomplete
paths:
  /api/v3/admin/stock_locations:
    post:
      tags:
        - Configuration
      summary: Create a stock location
      description: |-
        Creates a new stock location.

        Setting `default: true` automatically demotes the previous default
        location.


        **Required scope:** `write_settings` (for API-key authentication).
      parameters:
        - name: x-spree-api-key
          in: header
          required: true
          schema:
            type: string
        - name: Authorization
          in: header
          required: true
          description: Bearer token for admin authentication
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  example: Brooklyn warehouse
                admin_name:
                  type: string
                  nullable: true
                  description: Internal name shown only in the admin
                active:
                  type: boolean
                  example: true
                default:
                  type: boolean
                  description: Setting to true demotes the previous default.
                kind:
                  type: string
                  enum:
                    - warehouse
                    - store
                    - fulfillment_center
                  description: Categorizes the location.
                  example: warehouse
                propagate_all_variants:
                  type: boolean
                backorderable_default:
                  type: boolean
                address1:
                  type: string
                  nullable: true
                address2:
                  type: string
                  nullable: true
                city:
                  type: string
                  nullable: true
                zipcode:
                  type: string
                  nullable: true
                phone:
                  type: string
                  nullable: true
                company:
                  type: string
                  nullable: true
                country_iso:
                  type: string
                  nullable: true
                  description: ISO-3166 alpha-2 country code (e.g. "US").
                state_abbr:
                  type: string
                  nullable: true
                  description: >-
                    State / province abbreviation (e.g. "NY"). Resolved against
                    the selected country.
                state_name:
                  type: string
                  nullable: true
                  description: Free-text state for countries without a states list.
                pickup_enabled:
                  type: boolean
                pickup_stock_policy:
                  type: string
                  enum:
                    - local
                    - any
                  description: >-
                    'local' = items at this location only; 'any' =
                    transfer-eligible (ship-to-store).
                pickup_ready_in_minutes:
                  type: number
                  nullable: true
                  minimum: 0
                pickup_instructions:
                  type: string
                  nullable: true
              required:
                - name
      responses:
        '201':
          description: stock location created
          content:
            application/json:
              example:
                id: sloc_gbHJdmfrXB
                state_abbr: null
                name: Manhattan store
                address1: null
                city: null
                zipcode: null
                country_iso: null
                country_name: null
                state_text: null
                admin_name: null
                address2: null
                state_name: null
                phone: null
                company: null
                active: true
                default: false
                backorderable_default: false
                propagate_all_variants: false
                kind: store
                pickup_enabled: true
                pickup_stock_policy: local
                pickup_ready_in_minutes: 30
                pickup_instructions: null
                created_at: '2026-06-05T13:13:05.993Z'
                updated_at: '2026-06-05T13:13:05.993Z'
              schema:
                $ref: '#/components/schemas/StockLocation'
        '422':
          description: validation error
          content:
            application/json:
              example:
                error:
                  code: validation_error
                  message: Name can't be blank
                  details:
                    name:
                      - can't be blank
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - api_key: []
          bearer_auth: []
      x-codeSamples:
        - lang: javascript
          label: Spree Admin SDK
          source: |-
            import { createAdminClient } from '@spree/admin-sdk'

            const client = createAdminClient({
              baseUrl: 'https://your-store.com',
              secretKey: 'sk_xxx',
            })

            const stockLocation = await client.stockLocations.create({
              name: 'Brooklyn warehouse',
              kind: 'warehouse',
              country_iso: 'US',
              state_abbr: 'NY',
              city: 'Brooklyn',
              zipcode: '11201',
              pickup_enabled: true,
              pickup_stock_policy: 'local',
              pickup_ready_in_minutes: 60,
            })
components:
  schemas:
    StockLocation:
      type: object
      properties:
        id:
          type: string
        state_abbr:
          type: string
          nullable: true
        name:
          type: string
        address1:
          type: string
          nullable: true
        city:
          type: string
          nullable: true
        zipcode:
          type: string
          nullable: true
        country_iso:
          type: string
          nullable: true
        country_name:
          type: string
          nullable: true
        state_text:
          type: string
          nullable: true
        admin_name:
          type: string
          nullable: true
        address2:
          type: string
          nullable: true
        state_name:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        company:
          type: string
          nullable: true
        active:
          type: boolean
        default:
          type: boolean
        backorderable_default:
          type: boolean
        propagate_all_variants:
          type: boolean
        kind:
          type: string
        pickup_enabled:
          type: boolean
        pickup_stock_policy:
          type: string
        pickup_ready_in_minutes:
          type: number
          nullable: true
        pickup_instructions:
          type: string
          nullable: true
        created_at:
          type: string
        updated_at:
          type: string
      required:
        - id
        - state_abbr
        - name
        - address1
        - city
        - zipcode
        - country_iso
        - country_name
        - state_text
        - admin_name
        - address2
        - state_name
        - phone
        - company
        - active
        - default
        - backorderable_default
        - propagate_all_variants
        - kind
        - pickup_enabled
        - pickup_stock_policy
        - pickup_ready_in_minutes
        - pickup_instructions
        - created_at
        - updated_at
      x-typelizer: true
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: record_not_found
            message:
              type: string
              example: Record not found
            details:
              type: object
              description: Field-specific validation errors
              nullable: true
              example:
                name:
                  - is too short
                  - is required
                email:
                  - is invalid
          required:
            - code
            - message
      required:
        - error
      example:
        error:
          code: validation_error
          message: Validation failed
          details:
            name:
              - is too short
            email:
              - is invalid
  securitySchemes:
    api_key:
      type: apiKey
      name: x-spree-api-key
      in: header
      description: Secret API key for admin access
    bearer_auth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: JWT token for admin user authentication

````