Preo
  • Homepage
  • About
Apps
  • Dashboard
  • App Store
  • Google Play
Social
  • LinkedIn

© 2026 Preo ApS

  • Integration
  • API
Information
Auth
    Get user infoget
Editions
    List editionsgetCreate editionpostGet edition detailsgetUpdate editionpatchDuplicate editionpostGet edition field choicesgetRun edition healthcheckget
Orders
    List ordersgetRetrieve order detailsget
Purchases
    Retrieve purchase detailsgetCreate refund request for purchasepost
User
    List usersgetRetrieve usergetPartially update userpatch
Refunds
    Create refund request for purchasepostList refund requestsgetCreate refund requestpostRetrieve refund request detailsgetApprove refund requestpostReject refund requestpost
Files
    List filesgetUpload filepostGet file detailsgetDelete filedeleteUpdate file metadatapatch
Data Imports
    List data importsgetCreate data importpostGet data import detailsgetUpdate data importpatchCancel data importpostList column mappingsgetUpdate column mappingspatchPreview import ordersgetProcess column mappingspostList product mappingsgetUpdate product mappingspatchStart import processpostValidate column mappingspostImport external orderspost
Campaigns
    List campaignsgetCreate campaignpostRetrieve campaigngetDelete campaigndeleteUpdate campaignpatchCancel campaignpostSchedule campaignpostSend campaign nowpostGet campaign statsget
Consents
    List consentsgetCreate consentpostRetrieve consentgetDelete consentdeleteUpdate consentpatch
Email Messages
    List email messagesgetCreate email messagepostGet email message detailsgetDelete email messagedeleteUpdate email messagepatchAdopt template to editionpostDuplicate email messagepostPreview emailpostGet template variablesget
Segments
    List segmentsgetCreate segmentpostRetrieve segmentgetDelete segmentdeleteUpdate segmentpatchExport segment users as CSVgetRecalculate segmentpostReset stuck segment to draftpostGet CEL context schema and dynamic valuesgetValidate CEL expressionpost
Webhooks
    List webhook endpointsgetCreate webhook endpointpostRetrieve webhook endpointgetDelete webhook endpointdeleteUpdate webhook endpointpatchList deliveries for webhook endpointgetGet delivery detailgetRetry a failed deliverypostRotate webhook secretpost
Schemas
Preo API
Preo API

Refunds

Endpoint

Refund request workflow including approval and rejection.


Create refund request for purchase

POST
https://api.preo.dev
/v1/purchases/{id}/refund

Create a new refund request for this purchase. Reason is required; scope is auto-derived from reason but can be overridden if allowed.

Create refund request for purchase › path Parameters

id
​string · required

A unique value identifying this purchase.

Create refund request for purchase › Request Body

Serializer for creating refund requests via purchase context. Used with: POST /api/backoffice/purchases/{purchaseId}/refund/ The API is reason-driven: - reason is REQUIRED - scope is auto-derived from reason, but can be overridden (if allowed) - amount is auto-calculated for non-custom scopes
reason
​string · enum · required

Business reason for the refund (REQUIRED)

  • deposit_reclaim - Deposit reclaimed
  • sold_out - Item sold out
  • event_cancelled - Event cancelled
  • product_defect - Product defective
  • duplicate_purchase - Duplicate purchase
  • customer_request - Customer requested
  • compensation - Customer compensation
  • overcharge - Customer overcharged
  • other - Other reason
  • rental_return - Rental returned
Enum values:
deposit_reclaim
sold_out
event_cancelled
product_defect
duplicate_purchase
customer_request
compensation
overcharge
​

Scope of refund (optional - auto-derived from reason, can be overridden if allowed)

  • purchase_price - Price only
  • purchase_deposit - Deposit only
  • purchase_full - Full purchase (incl. fees)
  • purchase_custom - Custom purchase amount
  • transaction_full - Full transaction
  • transaction_custom - Custom transaction amount
amount
​number | null · double

Refund amount (required for CUSTOM scope, calculated automatically for others)

comment
​string

Optional comment explaining the refund reason

Default:
pickup_point_id
​string | null

Pickup point where refund is processed

Create refund request for purchase › Responses

id
​string · readOnly · required
edition_id
​string · readOnly · required
​readOnly · required
​readOnly · required
amount
​number · double · required
​object · readOnly · required

Staff user serializer for nested representations

​object · readOnly · required

Simple pickup point serializer for nested representations

created
​string · date-time · readOnly · required
modified
​string · date-time · readOnly · required
can_approve
​string · readOnly · required
can_reject
​string · readOnly · required
organization
​string | null
scope
​string · enum
  • purchase_price - Price only
  • purchase_deposit - Deposit only
  • purchase_full - Full purchase (incl. fees)
  • purchase_custom - Custom purchase amount
  • transaction_full - Full transaction
  • transaction_custom - Custom transaction amount
Enum values:
purchase_price
purchase_deposit
purchase_full
purchase_custom
transaction_full
transaction_custom
​
status
​string · enum
  • requested - requested
  • ready - ready
  • processing - processing
  • awaiting_gateway - awaiting gateway
  • processed - processed
  • failed - failed
  • rejected - rejected
  • invalid - invalid
Enum values:
requested
ready
processing
awaiting_gateway
processed
failed
rejected
invalid
comment
​string | null

Comment added upon custom refund

service_response
​
refund_date
​string | null · date-time

Date when refund was successfully processed

POST/v1/purchases/{id}/refund
curl --request POST \ --url https://api.preo.dev/v1/purchases/:id/refund \ --header 'Content-Type: application/json' \ --data ' { "reason": "deposit_reclaim", "scope": "purchase_price", "amount": 0, "comment": "", "pickup_point_id": "pickup_point_id" } '
shell
Example Request Body
{ "reason": "deposit_reclaim", "scope": "purchase_price", "amount": 0, "comment": "", "pickup_point_id": "pickup_point_id" }
json
Example Responses
{ "id": "id", "organization": "organization", "edition_id": "edition_id", "purchase": { "api_id": "api_id", "vendor_code": "vendor_code", "status": "paid", "product": { "api_id": "api_id", "name": "name", "is_draft": true, "images": [ { "thumbnail": "https://www.example.com/path/to/resource", "optimized": "https://www.example.com/path/to/resource", "large": "https://www.example.com/path/to/resource", "original": "https://www.example.com/path/to/resource" } ] }, "variant": "variant", "user": { "api_id": "api_id", "full_name": "full_name", "email": "test@example.com" }, "metadata": {} }, "transaction": { "id": "id", "type": "online", "status": "pending", "service": "service", "amount": 0, "currency": "eur", "service_fee": 0, "handling_fee": 0, "refunded_amount": 0, "available_refund_amount": 0, "created": "2024-08-25T15:00:00Z" }, "scope": "purchase_price", "reason": "deposit_reclaim", "status": "requested", "amount": 0, "comment": "comment", "staff_user": { "id": "id", "email": "test@example.com", "full_name": "full_name", "first_name": "first_name", "last_name": "last_name", "phone_number": "phone_number", "avatar": "https://www.example.com/path/to/resource", "has_custom_avatar": true }, "pickup_point": { "api_id": "api_id", "name": "name", "is_draft": true }, "service_response": {}, "refund_date": "2024-08-25T15:00:00Z", "created": "2024-08-25T15:00:00Z", "modified": "2024-08-25T15:00:00Z", "can_approve": "can_approve", "can_reject": "can_reject" }
json
application/json

List refund requests

GET
https://api.preo.dev
/v1/refunds

List all refund requests from accessible editions. Optionally filter by edition_id.

List refund requests › query Parameters

created_after
​string · date-time
created_before
​string · date-time
edition_id
​string

Optional: Filter by specific edition. If not provided, shows refunds from all accessible editions.

ordering
​string[] · style: form

Ordering

  • created - Created
  • -created - Created (descending)
  • status - Status
  • -status - Status (descending)
  • amount - Amount
  • -amount - Amount (descending)
  • refund_date - Refund date
  • -refund_date - Refund date (descending)
Enum values:
-amount
-created
-refund_date
-status
amount
created
refund_date
status
page
​integer

A page number within the paginated result set.

page_size
​integer

Number of results to return per page (default: 100).

purchase
​string | null

The specific Purchase being refunded (optional)

status
​string · enum
  • requested - requested
  • ready - ready
  • processing - processing
  • awaiting_gateway - awaiting gateway
  • processed - processed
  • failed - failed
  • rejected - rejected
  • invalid - invalid
Enum values:
awaiting_gateway
failed
invalid
processed
processing
ready
rejected
requested
transaction
​string | null

Transaction to refund from (required for gateway processing)

List refund requests › Responses

200
count
​integer · required
​object[] · required
next
​string · uri
previous
​string · uri
GET/v1/refunds
curl --request GET \ --url https://api.preo.dev/v1/refunds
shell
Example Responses
{ "count": 123, "next": "http://api.example.org/accounts/?page=4", "previous": "http://api.example.org/accounts/?page=2", "results": [ { "id": "id", "edition_id": "edition_id", "purchase_id": "purchase_id", "transaction_id": "transaction_id", "product_name": "product_name", "scope": "purchase_price", "reason": "deposit_reclaim", "status": "requested", "amount": 0, "comment": "comment", "staff_user_name": "staff_user_name", "created": "2024-08-25T15:00:00Z", "refund_date": "2024-08-25T15:00:00Z" } ] }
json
application/json

Create refund request

POST
https://api.preo.dev
/v1/refunds

Create a refund request for a purchase or transaction. Provide either purchase_id or transaction_id (exactly one required).

Create refund request › Request Body

General-purpose serializer for creating refund requests. Used with: POST /v1/refunds/ Accepts either purchase_id or transaction_id (exactly one required).
reason
​string · enum · required

Business reason for the refund

  • deposit_reclaim - Deposit reclaimed
  • sold_out - Item sold out
  • event_cancelled - Event cancelled
  • product_defect - Product defective
  • duplicate_purchase - Duplicate purchase
  • customer_request - Customer requested
  • compensation - Customer compensation
  • overcharge - Customer overcharged
  • other - Other reason
  • rental_return - Rental returned
Enum values:
deposit_reclaim
sold_out
event_cancelled
product_defect
duplicate_purchase
customer_request
compensation
overcharge
purchase_id
​string | null

Purchase to refund (mutually exclusive with transaction_id)

transaction_id
​string | null

Transaction to refund (mutually exclusive with purchase_id)

​

Scope of refund (optional - auto-derived from reason)

  • purchase_price - Price only
  • purchase_deposit - Deposit only
  • purchase_full - Full purchase (incl. fees)
  • purchase_custom - Custom purchase amount
  • transaction_full - Full transaction
  • transaction_custom - Custom transaction amount
amount
​number | null · double

Refund amount (required for CUSTOM scopes, calculated automatically for others)

comment
​string

Optional comment explaining the refund reason

Default:
pickup_point_id
​string | null

Pickup point where refund is processed

Create refund request › Responses

id
​string · readOnly · required
edition_id
​string · readOnly · required
​readOnly · required
​readOnly · required
amount
​number · double · required
​object · readOnly · required

Staff user serializer for nested representations

​object · readOnly · required

Simple pickup point serializer for nested representations

created
​string · date-time · readOnly · required
modified
​string · date-time · readOnly · required
can_approve
​string · readOnly · required
can_reject
​string · readOnly · required
organization
​string | null
scope
​string · enum
  • purchase_price - Price only
  • purchase_deposit - Deposit only
  • purchase_full - Full purchase (incl. fees)
  • purchase_custom - Custom purchase amount
  • transaction_full - Full transaction
  • transaction_custom - Custom transaction amount
Enum values:
purchase_price
purchase_deposit
purchase_full
purchase_custom
transaction_full
transaction_custom
​
status
​string · enum
  • requested - requested
  • ready - ready
  • processing - processing
  • awaiting_gateway - awaiting gateway
  • processed - processed
  • failed - failed
  • rejected - rejected
  • invalid - invalid
Enum values:
requested
ready
processing
awaiting_gateway
processed
failed
rejected
invalid
comment
​string | null

Comment added upon custom refund

service_response
​
refund_date
​string | null · date-time

Date when refund was successfully processed

POST/v1/refunds
curl --request POST \ --url https://api.preo.dev/v1/refunds \ --header 'Content-Type: application/json' \ --data ' { "purchase_id": "purchase_id", "transaction_id": "transaction_id", "reason": "deposit_reclaim", "scope": "purchase_price", "amount": 0, "comment": "", "pickup_point_id": "pickup_point_id" } '
shell
Example Request Body
{ "purchase_id": "purchase_id", "transaction_id": "transaction_id", "reason": "deposit_reclaim", "scope": "purchase_price", "amount": 0, "comment": "", "pickup_point_id": "pickup_point_id" }
json
Example Responses
{ "id": "id", "organization": "organization", "edition_id": "edition_id", "purchase": { "api_id": "api_id", "vendor_code": "vendor_code", "status": "paid", "product": { "api_id": "api_id", "name": "name", "is_draft": true, "images": [ { "thumbnail": "https://www.example.com/path/to/resource", "optimized": "https://www.example.com/path/to/resource", "large": "https://www.example.com/path/to/resource", "original": "https://www.example.com/path/to/resource" } ] }, "variant": "variant", "user": { "api_id": "api_id", "full_name": "full_name", "email": "test@example.com" }, "metadata": {} }, "transaction": { "id": "id", "type": "online", "status": "pending", "service": "service", "amount": 0, "currency": "eur", "service_fee": 0, "handling_fee": 0, "refunded_amount": 0, "available_refund_amount": 0, "created": "2024-08-25T15:00:00Z" }, "scope": "purchase_price", "reason": "deposit_reclaim", "status": "requested", "amount": 0, "comment": "comment", "staff_user": { "id": "id", "email": "test@example.com", "full_name": "full_name", "first_name": "first_name", "last_name": "last_name", "phone_number": "phone_number", "avatar": "https://www.example.com/path/to/resource", "has_custom_avatar": true }, "pickup_point": { "api_id": "api_id", "name": "name", "is_draft": true }, "service_response": {}, "refund_date": "2024-08-25T15:00:00Z", "created": "2024-08-25T15:00:00Z", "modified": "2024-08-25T15:00:00Z", "can_approve": "can_approve", "can_reject": "can_reject" }
json
application/json

Retrieve refund request details

GET
https://api.preo.dev
/v1/refunds/{id}

Get detailed information about a specific refund request

Retrieve refund request details › path Parameters

id
​string · required

A unique value identifying this refund request.

Retrieve refund request details › Responses

200
id
​string · readOnly · required
edition_id
​string · readOnly · required
​readOnly · required
​readOnly · required
amount
​number · double · required
​object · readOnly · required

Staff user serializer for nested representations

​object · readOnly · required

Simple pickup point serializer for nested representations

created
​string · date-time · readOnly · required
modified
​string · date-time · readOnly · required
can_approve
​string · readOnly · required
can_reject
​string · readOnly · required
organization
​string | null
scope
​string · enum
  • purchase_price - Price only
  • purchase_deposit - Deposit only
  • purchase_full - Full purchase (incl. fees)
  • purchase_custom - Custom purchase amount
  • transaction_full - Full transaction
  • transaction_custom - Custom transaction amount
Enum values:
purchase_price
purchase_deposit
purchase_full
purchase_custom
transaction_full
transaction_custom
​
status
​string · enum
  • requested - requested
  • ready - ready
  • processing - processing
  • awaiting_gateway - awaiting gateway
  • processed - processed
  • failed - failed
  • rejected - rejected
  • invalid - invalid
Enum values:
requested
ready
processing
awaiting_gateway
processed
failed
rejected
invalid
comment
​string | null

Comment added upon custom refund

service_response
​
refund_date
​string | null · date-time

Date when refund was successfully processed

GET/v1/refunds/{id}
curl --request GET \ --url https://api.preo.dev/v1/refunds/:id
shell
Example Responses
{ "id": "id", "organization": "organization", "edition_id": "edition_id", "purchase": { "api_id": "api_id", "vendor_code": "vendor_code", "status": "paid", "product": { "api_id": "api_id", "name": "name", "is_draft": true, "images": [ { "thumbnail": "https://www.example.com/path/to/resource", "optimized": "https://www.example.com/path/to/resource", "large": "https://www.example.com/path/to/resource", "original": "https://www.example.com/path/to/resource" } ] }, "variant": "variant", "user": { "api_id": "api_id", "full_name": "full_name", "email": "test@example.com" }, "metadata": {} }, "transaction": { "id": "id", "type": "online", "status": "pending", "service": "service", "amount": 0, "currency": "eur", "service_fee": 0, "handling_fee": 0, "refunded_amount": 0, "available_refund_amount": 0, "created": "2024-08-25T15:00:00Z" }, "scope": "purchase_price", "reason": "deposit_reclaim", "status": "requested", "amount": 0, "comment": "comment", "staff_user": { "id": "id", "email": "test@example.com", "full_name": "full_name", "first_name": "first_name", "last_name": "last_name", "phone_number": "phone_number", "avatar": "https://www.example.com/path/to/resource", "has_custom_avatar": true }, "pickup_point": { "api_id": "api_id", "name": "name", "is_draft": true }, "service_response": {}, "refund_date": "2024-08-25T15:00:00Z", "created": "2024-08-25T15:00:00Z", "modified": "2024-08-25T15:00:00Z", "can_approve": "can_approve", "can_reject": "can_reject" }
json
application/json

Approve refund request

POST
https://api.preo.dev
/v1/refunds/{id}/approve

Mark a refund request as ready for processing

Approve refund request › path Parameters

id
​string · required

A unique value identifying this refund request.

Approve refund request › Responses

No response body

No data returned
POST/v1/refunds/{id}/approve
curl --request POST \ --url https://api.preo.dev/v1/refunds/:id/approve
shell
Example Responses
No example specified for this content type

Reject refund request

POST
https://api.preo.dev
/v1/refunds/{id}/reject

Reject a refund request with a reason

Reject refund request › path Parameters

id
​string · required

A unique value identifying this refund request.

Reject refund request › Request Body

id
​string · readOnly · required
edition_id
​string · readOnly · required
​readOnly · required
​readOnly · required
amount
​number · double · required
​object · readOnly · required

Staff user serializer for nested representations

​object · readOnly · required

Simple pickup point serializer for nested representations

created
​string · date-time · readOnly · required
modified
​string · date-time · readOnly · required
can_approve
​string · readOnly · required
can_reject
​string · readOnly · required
organization
​string | null
scope
​string · enum
  • purchase_price - Price only
  • purchase_deposit - Deposit only
  • purchase_full - Full purchase (incl. fees)
  • purchase_custom - Custom purchase amount
  • transaction_full - Full transaction
  • transaction_custom - Custom transaction amount
Enum values:
purchase_price
purchase_deposit
purchase_full
purchase_custom
transaction_full
transaction_custom
​
status
​string · enum
  • requested - requested
  • ready - ready
  • processing - processing
  • awaiting_gateway - awaiting gateway
  • processed - processed
  • failed - failed
  • rejected - rejected
  • invalid - invalid
Enum values:
requested
ready
processing
awaiting_gateway
processed
failed
rejected
invalid
comment
​string | null

Comment added upon custom refund

service_response
​
refund_date
​string | null · date-time

Date when refund was successfully processed

Reject refund request › Responses

No response body

No data returned
POST/v1/refunds/{id}/reject
curl --request POST \ --url https://api.preo.dev/v1/refunds/:id/reject \ --header 'Content-Type: application/json' \ --data ' { "id": "id", "organization": "organization", "edition_id": "edition_id", "purchase": { "api_id": "api_id", "vendor_code": "vendor_code", "status": "paid", "product": { "api_id": "api_id", "name": "name", "is_draft": true, "images": [ { "thumbnail": "https://www.example.com/path/to/resource", "optimized": "https://www.example.com/path/to/resource", "large": "https://www.example.com/path/to/resource", "original": "https://www.example.com/path/to/resource" } ] }, "variant": "variant", "user": { "api_id": "api_id", "full_name": "full_name", "email": "test@example.com" }, "metadata": {} }, "transaction": { "id": "id", "type": "online", "status": "pending", "service": "service", "amount": 0, "currency": "eur", "service_fee": 0, "handling_fee": 0, "refunded_amount": 0, "available_refund_amount": 0, "created": "2024-08-25T15:00:00Z" }, "scope": "purchase_price", "reason": "deposit_reclaim", "status": "requested", "amount": 0, "comment": "comment", "staff_user": { "id": "id", "email": "test@example.com", "full_name": "full_name", "first_name": "first_name", "last_name": "last_name", "phone_number": "phone_number", "avatar": "https://www.example.com/path/to/resource", "has_custom_avatar": true }, "pickup_point": { "api_id": "api_id", "name": "name", "is_draft": true }, "service_response": {}, "refund_date": "2024-08-25T15:00:00Z", "created": "2024-08-25T15:00:00Z", "modified": "2024-08-25T15:00:00Z", "can_approve": "can_approve", "can_reject": "can_reject" } '
shell
Example Request Body
{ "id": "id", "organization": "organization", "edition_id": "edition_id", "purchase": { "api_id": "api_id", "vendor_code": "vendor_code", "status": "paid", "product": { "api_id": "api_id", "name": "name", "is_draft": true, "images": [ { "thumbnail": "https://www.example.com/path/to/resource", "optimized": "https://www.example.com/path/to/resource", "large": "https://www.example.com/path/to/resource", "original": "https://www.example.com/path/to/resource" } ] }, "variant": "variant", "user": { "api_id": "api_id", "full_name": "full_name", "email": "test@example.com" }, "metadata": {} }, "transaction": { "id": "id", "type": "online", "status": "pending", "service": "service", "amount": 0, "currency": "eur", "service_fee": 0, "handling_fee": 0, "refunded_amount": 0, "available_refund_amount": 0, "created": "2024-08-25T15:00:00Z" }, "scope": "purchase_price", "reason": "deposit_reclaim", "status": "requested", "amount": 0, "comment": "comment", "staff_user": { "id": "id", "email": "test@example.com", "full_name": "full_name", "first_name": "first_name", "last_name": "last_name", "phone_number": "phone_number", "avatar": "https://www.example.com/path/to/resource", "has_custom_avatar": true }, "pickup_point": { "api_id": "api_id", "name": "name", "is_draft": true }, "service_response": {}, "refund_date": "2024-08-25T15:00:00Z", "created": "2024-08-25T15:00:00Z", "modified": "2024-08-25T15:00:00Z", "can_approve": "can_approve", "can_reject": "can_reject" }
json
Example Responses
No example specified for this content type

UserFiles