openapi: 3.0.3 info: title: Admin Account / Address Policies 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.\n\n## Authentication\n\nThe Admin API requires a secret API key passed in the `x-spree-api-key` header.\nSecret API keys can be generated in the Spree admin dashboard.\n\n## Response Format\n\nAll responses are JSON. List endpoints return paginated responses with `data` and `meta` keys.\nSingle resource endpoints return a flat JSON object.\n\n## Resource IDs\n\nEvery resource is identified by an opaque string ID (e.g. `prod_86Rf07xd4z`,\n`variant_k5nR8xLq`, `or_UkLWZg9DAJ`). Use these IDs everywhere — URL paths,\nrequest bodies, and Ransack filters all accept them directly.\n\n## Error Handling\n\nErrors return a consistent format:\n```json\n{\n \"error\": {\n \"code\": \"validation_error\",\n \"message\": \"Validation failed\",\n \"details\": { \"name\": [\"can't be blank\"] }\n }\n}\n```\n" version: v3 servers: - url: http://{defaultHost} variables: defaultHost: default: localhost:3000 tags: - name: Policies description: Store policies (return policy, privacy policy, terms of service) paths: /api/v3/store/policies: get: summary: List store policies tags: - Policies security: - api_key: [] description: 'Returns all policies for the current store (e.g., return policy, privacy policy, terms of service). Policies are managed in Spree Admin and contain rich text content. ' x-codeSamples: - lang: javascript label: Spree SDK source: "import { createClient } from '@spree/sdk'\n\nconst client = createClient({\n baseUrl: 'https://your-store.com',\n publishableKey: '',\n})\n\nconst policies = await client.policies.list()" parameters: - name: x-spree-api-key in: header required: true schema: type: string - name: fields in: query required: false description: Comma-separated list of fields to include (e.g., name,slug). id is always included. schema: type: string responses: '200': description: policies listed content: application/json: example: data: - id: pol_gbHJdmfrXB name: Privacy Policy slug: privacy-policy body: '' body_html: '' - id: pol_OIJLhNcSbf name: Privacy Policy slug: privacy-policy-006f63da-6062-4a3f-9fd7-aa690f7b356c body: We respect your privacy. body_html: "
\n We respect your privacy.\n
\n" - id: pol_uw2YK1rnl0 name: Return Policy slug: return-policy body: You can return items within 30 days. body_html: "
\n You can return items within 30 days.\n
\n" - id: pol_EfhxLZ9ck8 name: Returns Policy slug: returns-policy body: '' body_html: '' - id: pol_VqXmZF31wY name: Shipping Policy slug: shipping-policy body: '' body_html: '' - id: pol_UkLWZg9DAJ name: Terms of Service slug: terms-of-service body: '' body_html: '' meta: page: 1 limit: 25 count: 6 pages: 1 from: 1 to: 6 in: 6 previous: null next: null schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Policy' required: - data '401': description: unauthorized content: application/json: example: error: code: invalid_token message: Valid API key required schema: $ref: '#/components/schemas/ErrorResponse' /api/v3/store/policies/{id}: get: summary: Get a policy tags: - Policies security: - api_key: [] description: Returns a single policy by slug or prefixed ID. Includes the full rich text body. x-codeSamples: - lang: javascript label: Spree SDK source: "import { createClient } from '@spree/sdk'\n\nconst client = createClient({\n baseUrl: 'https://your-store.com',\n publishableKey: '',\n})\n\nconst policy = await client.policies.get('return-policy')" parameters: - name: x-spree-api-key in: header required: true schema: type: string - name: id in: path required: true description: Policy slug (e.g., return-policy) or prefixed ID (e.g., pol_abc123) schema: type: string - name: fields in: query required: false description: Comma-separated list of fields to include. id is always included. schema: type: string responses: '200': description: policy found content: application/json: example: id: pol_uw2YK1rnl0 name: Return Policy slug: return-policy body: You can return items within 30 days. body_html: "
\n You can return items within 30 days.\n
\n" schema: $ref: '#/components/schemas/Policy' '404': description: policy not found content: application/json: example: error: code: record_not_found message: Policy not found schema: $ref: '#/components/schemas/ErrorResponse' /api/v2/storefront/policies: get: summary: List all Store Policies description: Returns a list of Store Policies. This endpoint is only available in Spree 5.2 or later. tags: - Policies operationId: policies-list responses: '200': $ref: '#/components/responses/PolicyList' /api/v2/storefront/policies/{policy_slug}: get: summary: Retrieve a Policy description: Returns the details of a specified Policy. This endpoint is only available in Spree 5.2 or later. tags: - Policies operationId: show-policy responses: '200': $ref: '#/components/responses/Policy' '404': $ref: '#/components/responses/404NotFound' components: schemas: Policy: type: object properties: id: type: string name: type: string slug: type: string body: type: string nullable: true body_html: type: string nullable: true required: - id - name - slug - body - body_html x-typelizer: true Policy_2: type: object title: Policy description: Policy represents terms and conditions, privacy policies, and other legal documents that can be displayed on the storefront. properties: id: type: string example: '1' type: type: string default: policy attributes: type: object properties: name: type: string example: Terms and Conditions description: Display name of the policy slug: type: string example: terms-and-conditions description: URL-friendly identifier for the policy created_at: $ref: '#/components/schemas/Timestamp' updated_at: $ref: '#/components/schemas/Timestamp' body: type: string example: asdrdfas description: Raw text content of the policy nullable: true body_html: type: string example: "
\n
asdrdfas
\n
\n" description: HTML formatted content of the policy nullable: true required: - name - slug - created_at - updated_at required: - id - type - attributes Timestamp: type: string format: date-time example: '2020-02-16T07:14:54.617Z' x-internal: false title: Time Stamp x-examples: example-1: '2020-02-16T07:14:54.617Z' 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 responses: 404NotFound: description: 404 Not Found - Resource not found. content: application/vnd.api+json: schema: properties: error: type: string example: The resource you were looking for could not be found. default: The resource you were looking for could not be found. examples: 404 Example: value: error: The resource you were looking for could not be found. PolicyList: description: 200 Success - Returns an array of `policy` objects. content: application/vnd.api+json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Policy_2' required: - data examples: List of Policies: value: data: - id: '1' type: policy attributes: name: Terms and Conditions slug: terms-and-conditions created_at: '2025-08-12T12:13:09.183Z' updated_at: '2025-08-12T13:27:59.470Z' body: asdrdfas body_html: "
\n
asdrdfas
\n
\n" - id: '2' type: policy attributes: name: Privacy Policy slug: privacy-policy created_at: '2025-08-12T10:00:00.000Z' updated_at: '2025-08-12T10:00:00.000Z' body: Privacy policy content body_html: "
\n
Privacy policy content
\n
\n" Policy: description: 200 Success - Returns the `policy` object. content: application/vnd.api+json: schema: type: object properties: data: $ref: '#/components/schemas/Policy_2' required: - data examples: Policy: value: data: id: '1' type: policy attributes: name: Terms and Conditions slug: terms-and-conditions created_at: '2025-08-12T12:13:09.183Z' updated_at: '2025-08-12T13:27:59.470Z' body: asdrdfas body_html: "
\n
asdrdfas
\n
\n" 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 x-tagGroups: - name: Authentication tags: - Authentication - name: Products & Catalog tags: - Products - Variants - Option Types - Custom Fields - Channels - name: Pricing tags: - Pricing - Markets - name: Orders & Fulfillment tags: - Orders - Payments - Fulfillments - Refunds - name: Customers tags: - Customers - Customer Groups - name: Promotions & Gift Cards tags: - Promotions - Gift Cards - name: Data tags: - Exports - name: Configuration tags: - Settings - Stock Locations - Payment Methods - Staff - API Keys - Allowed Origins - Webhooks