API reference / Sandbox
Re-seed default sandbox fixtures (1 seller, 1 buyer, 7 products) and return their ids. Idempotent — does not delete existing data.
POST/open/v1/sandbox/seedScope: No data scope
Service Endpoint Seller token not required
| Environment | Base URL + Path |
|---|---|
| Production | https://open.mallplus.ph/open/v1/sandbox/seed |
| Sandbox | https://sandbox.open.mallplus.ph/open/v1/sandbox/seed |
Common Signing and Seller Headers
| Header | Type | Required | Rules | Description |
|---|---|---|---|---|
| X-MallPlus-Partner-Id | string | Yes | Issued client ID for the calling app. | Identifies the partner app whose secret signs the request. |
| X-MallPlus-Timestamp | integer | Yes | Unix timestamp in seconds; default acceptance window is 90 seconds. | Prevents replay outside the allowed signing window. |
| X-MallPlus-Signature-Version | string | Yes | Use 3 for HMAC v3. | Selects the request signing algorithm. |
| X-MallPlus-Nonce | string | Yes | 32-64 lowercase hexadecimal characters, unique per request. | Replay-protection nonce included in the v3 signing base string. |
| X-MallPlus-Signature | string | Yes | HMAC-SHA256 over timestamp, client ID, method, path, canonical query, body hash, and nonce. | Cryptographic proof that the request was signed with the app secret. |
| X-MallPlus-Access-Token | string | Conditional | Required when the operation says seller token required. | Seller OAuth access token returned by the authorization flow. |
| X-MallPlus-Seller-Id | string | Conditional | Required when X-MallPlus-Access-Token is required. | Seller ID bound to the seller OAuth token. |
Parameters
| Name | In | Type | Required | Rules | Description |
|---|---|---|---|---|---|
| Idempotency-Key | header | string | No | Min length: 1 | Recommended UUID per logical operation. Retry with the same key and a byte-identical body. Omitting the header still runs the mutation and sets X-MallPlus-Idempotency: absent. |
Request Body required
| Field | Type | Required | Rules | Description |
|---|---|---|---|---|
| sandboxId | string | No | Min length: 1; Max length: 64 | Owned sandbox shop to seed; optional only when the developer has exactly one shop. |
Response Parameters
Success status: HTTP 200
| Field | Type | Rules | Description |
|---|---|---|---|
| success | boolean | - | Whether the sandbox seed request succeeded. |
| data | SandboxSeedData | No additional properties | Response or event payload for this schema. |
| data.seller | SandboxSeller | No additional properties | Seller details. |
| data.seller.id | string | - | Sandbox seller identifier used by sandbox order and seller OAuth flows. |
| data.seller.name | string | - | Display name of the test seller. |
| data.seller.email | string<email> | Format: email | Email address assigned to the test seller. |
| data.seller.storeName | string | - | Storefront name assigned to the test seller. |
| data.seller.status | enum | Allowed: active, suspended | Lifecycle status of the test seller within the sandbox. |
| data.seller.sandboxId | string | - | Sandbox shop identifier linked to a seeded seller when the seller was created from a sandbox shop. |
| data.seller.oauthIdentifier | string | - | Identifier partners use for seller OAuth sandbox consent. Present only for sellers linked to a sandbox shop. |
| data.seller.createdAt | string<date-time> | Format: date-time | ISO-8601 UTC timestamp when the sandbox seller was created. |
| data.seller.updatedAt | string<date-time> | Format: date-time | ISO-8601 UTC timestamp when the sandbox seller was last updated. |
| data.buyer | SandboxBuyer | No additional properties | Buyer details. |
| data.buyer.id | string | - | Sandbox buyer identifier used by sandbox order flows. |
| data.buyer.name | string | - | Display name of the test buyer. |
| data.buyer.email | string<email> | Format: email | Email address assigned to the test buyer. |
| data.buyer.phoneNumber | string | - | Phone number assigned to the test buyer. |
| data.buyer.shippingAddress | SandboxBuyerShippingAddress | No additional properties | Shipping address details. |
| data.buyer.shippingAddress.id | string | - | Server-minted shipping-address identifier. Record this as ADDRESS-1; echoed on the order after place. |
| data.buyer.shippingAddress.line1 | string | - | Primary street address line. |
| data.buyer.shippingAddress.line2 | string | - | Optional secondary street address line such as unit or floor. |
| data.buyer.shippingAddress.city | string | - | PSGC-aligned Philippine city or municipality. |
| data.buyer.shippingAddress.region | string | - | PSGC-aligned Philippine region. |
| data.buyer.shippingAddress.postalCode | string | - | Postal code for the sandbox buyer shipping address. |
| data.buyer.shippingAddress.country | string | - | ISO 3166-1 alpha-2 country code for the shipping address. |
| data.buyer.createdAt | string<date-time> | Format: date-time | ISO-8601 UTC timestamp when the sandbox buyer was created. |
| data.buyer.updatedAt | string<date-time> | Format: date-time | ISO-8601 UTC timestamp when the sandbox buyer was last updated. |
| data.productsCount | integer | Minimum: 0 | Number of sandbox products available after the seed operation. |
| data.products | array<SandboxSeedProduct> | Max items: 100 | The seeded seller's sandbox products, newly created or already present. Use id as items[].productId on POST /open/v1/sandbox/orders; only live products with stock above 0 can be ordered. |
| data.products[] | SandboxSeedProduct | No additional properties | A sandbox product available to the seeded seller. |
| data.products[].id | string | - | Sandbox product id. Pass it as items[].productId on POST /open/v1/sandbox/orders. |
| data.products[].title | string | - | Product title. |
| data.products[].sku | string | - | Product SKU. |
| data.products[].price | integer | Minimum: 0; Maximum: 99999999 | Integer amount in PHP centavos. |
| data.products[].stock | integer | Minimum: 0 | Units on hand. |
| data.products[].status | enum | Allowed: live, unlisted, delisted, proposed, under_review, archived | Product status. POST /open/v1/sandbox/orders accepts only live; any other status is refused with 400. |
Error Codes
| HTTP Status | Schema | Description |
|---|---|---|
| 400 | PlatformError400Response | Validation error, or a missing/malformed required signing header (BAD_REQUEST) |
| 401 | PlatformError401Response | Unauthorized — invalid credentials, invalid signature, or expired timestamp (TIMESTAMP_EXPIRED) |
| 403 | PlatformError403Response | Forbidden — insufficient scope |
| 409 | Unenumerated409ErrorResponse | The request conflicts with the current resource state or reuses an idempotency key |
| 413 | PlatformError413Response | The request body exceeds the endpoint payload limit |
| 429 | PlatformError429Response | The partner or endpoint rate limit has been exceeded |
| 503 | PlatformError503Response | A required platform or upstream dependency is temporarily unavailable |
This operation does not declare its own error.code list. Any operation can return the authentication, signing, scope, rate-limit and system codes listed in the Error code reference.
Request Example
curl -X POST "https://sandbox.open.mallplus.ph/open/v1/sandbox/seed" \
-H "X-MallPlus-Partner-Id: mp_partner_123" \
-H "X-MallPlus-Timestamp: 1786924800" \
-H "X-MallPlus-Signature-Version: 3" \
-H "X-MallPlus-Nonce: 4f8b9a0c4d5e6f708192a3b4c5d6e7f8" \
-H "X-MallPlus-Signature: <hex_hmac_sha256>" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
--data '{
"sandboxId": "sandboxId_123"
}'Response Example
{
"success": true,
"data": {
"seller": {
"id": "sel_seeded_contract",
"name": "Sandbox Seller",
"email": "sandbox-seller@example.com",
"storeName": "Sandbox Default Store",
"status": "active",
"sandboxId": "sandbox_response_contract",
"oauthIdentifier": "sel_seeded_contract",
"createdAt": "2026-08-26T04:00:00.000Z",
"updatedAt": "2026-08-26T04:00:00.000Z"
},
"buyer": {
"id": "buy_test_contract",
"name": "Sandbox Buyer",
"email": "sandbox-buyer@example.com",
"phoneNumber": "+639001112233",
"shippingAddress": {
"id": "addr_test_contract",
"line1": "1 Sandbox St",
"city": "Manila",
"region": "NCR",
"postalCode": "1000",
"country": "PH"
},
"createdAt": "2026-08-26T04:00:00.000Z",
"updatedAt": "2026-08-26T04:00:00.000Z"
},
"productsCount": 7,
"products": [
{
"id": "prod_Sp3kR8vQ2nXa",
"title": "NovaTech Wireless Bluetooth Speaker Mini Portable Black Model S1",
"sku": "ELEC-1001",
"price": 129900,
"stock": 54,
"status": "live"
},
{
"id": "prod_Wl7mT4cH9pBe",
"title": "Premium Leather Bifold Wallet RFID Blocking Brown",
"sku": "FASH-2001",
"price": 89900,
"stock": 120,
"status": "live"
},
{
"id": "prod_Mt2qZ6yN5rDk",
"title": "Organic Green Tea Matcha Powder 100g",
"sku": "FOOD-3001",
"price": 34900,
"stock": 200,
"status": "live"
},
{
"id": "prod_Cb9wF3jL7sGu",
"title": "USB-C Fast Charging Cable 2m Braided Nylon",
"sku": "ELEC-1002",
"price": 24900,
"stock": 340,
"status": "live"
},
{
"id": "prod_Bc4nV8xP1tHm",
"title": "Bamboo Cutting Board Set 3pcs Eco-Friendly",
"sku": "HOME-4001",
"price": 59900,
"stock": 75,
"status": "unlisted"
},
{
"id": "prod_Ld6rK2gW8vJq",
"title": "LED Desk Lamp Touch Control Adjustable",
"sku": "HOME-4002",
"price": 149900,
"stock": 42,
"status": "live"
},
{
"id": "prod_Tw1hY5mC3xLz",
"title": "Cotton Bath Towel Set Premium Absorbent",
"sku": "LIVE-5001",
"price": 79900,
"stock": 0,
"status": "archived"
}
]
}
}