API test suite for Toolshop (Practice Software Testing, sprint5). Folders follow the run order in PLAN-DE-RULARE.md; each request is named after its test case (T-XXX).
| Summary Item | Total | Failed |
|---|---|---|
| Requests | 355 | 0 |
| Prerequest Scripts | 400 | 0 |
| Test Scripts | 349 | 0 |
| Assertions | 582 | 35 |
| Skipped Tests | 0 | - |
expected response to have status code 422 but got 201
expected response to have status code 422 but got 200
expected '{"message":"Payment was successful"}' to not include 'Payment was successful'
expected response to have status code 422 but got 200
expected '{"message":"Payment was successful"}' to not include 'Payment was successful'
expected 201 to be one of [ 404, 422 ]
expected response to have status code 200 but got 404
expected 'application/json' to include 'application/pdf'
expected response to have status code 403 but got 200
expected response to have status code 403 but got 404
expected 'COMPLETED' to not deeply equal 'COMPLETED'
expected 200 to be one of [ 401, 403, 404 ]
expected 200 to be one of [ 403, 404 ]
expected 'NEW' to deeply equal 'RESOLVED'
expected 200 to be one of [ 401, 403, 404 ]
expected 201 to be one of [ 403, 404 ]
expected 200 to be one of [ 403, 404 ]
expected 200 to be one of [ 401, 403, 404 ]
expected 200 to be one of [ 401, 403, 404 ]
expected 204 to be one of [ 401, 403, 404 ]
expected response to have status code 401 but got 201
expected response to have status code 403 but got 201
expected 201 to be one of [ 401, 403 ]
expected response to have status code 401 but got 201
expected response to have status code 403 but got 201
expected response to have status code 401 but got 200
expected response to have status code 403 but got 200
expected 0.01 to deeply equal 14.15
expected 422 to deeply equal 200
expected '{"message":"The selected email is inv…' to deeply equal '{"success":true}'
expected 500 to be below 500
expected 500 to be below 500
expected response to have status code 401 but got 200
expected 1792245733889 to be above 1792245923124
expected response to have status code 429 but got 200
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | e838d123-6a4d-470b-b4ec-625f779f58fe |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 340 |
{
"first_name": "QA",
"last_name": "UserA",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+a-1792245587396@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 13:59:55 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":"QA","last_name":"UserA","phone":"0612345678","dob":"1990-01-01","email":"qa+a-1792245587396@test.local","id":"01m552jz1by17vr3sx9zcb1275","created_at":"2026-10-17 13:59:55","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Register A: 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | be8d8f70-a0cd-46ec-92d0-c2b06e10e3aa |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 91 |
{
"email": "qa+a-1792245587396@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 13:59:56 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Login A: 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 0e9e5f84-427f-4032-a8fb-85219fe96313 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 340 |
{
"first_name": "QA",
"last_name": "UserB",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+b-1792245587396@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 13:59:56 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":"QA","last_name":"UserB","phone":"0612345678","dob":"1990-01-01","email":"qa+b-1792245587396@test.local","id":"01m552k0pjeydtzqfwz44279eb","created_at":"2026-10-17 13:59:56","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Register B: 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 00b4a456-8ffd-4bbb-8a35-6d33967c8878 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 91 |
{
"email": "qa+b-1792245587396@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 13:59:57 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Login B: 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9cea558b-29b8-472a-8c3f-1bf3fa3e3b8f |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 77 |
{
"email": "admin@practicesoftwaretesting.com",
"password": "welcome01"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 13:59:57 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Login admin: 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9f2657e9-dea1-4e23-8766-91c28f2ec2ab |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 13:59:58 GMT |
| ETag | "279a8802f640ba9051528ca11db63517" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2AG9122BMKVRF3XH0Z","name":"Pliers","description":"Reliable general-purpose pliers crafted from drop-forged carbon steel for long-lasting durability in demanding working conditions. The serrated jaws provide a firm grip on a variety of materials including wire, nails, small fasteners, and irregularly shaped objects. Comfortable rubber-coated handles absorb vibration and reduce hand fatigue during extended use, while the non-slip surface ensures confident handling. The precision pivot joint maintains alignment under load, delivering smooth, controlled jaw action with every squeeze. Heat-treated steel construction resists wear and deformation even under heavy use. A must-have foundational tool for any workshop, equally suited for professional tradespeople and home repair projects.","price":12.01,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7K","by_name":"Everyday basics","by_url":"https:\/\/unsplash.com\/@zanardi","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/I8eTuMmxIfo","file_name":"pliers02.avif","title":"Pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2BGG1K6K9GEJTT8GEQ","name":"Bolt Cutters","description":"Heavy-duty bolt cutters engineered to slice through hardened bolts, chains, padlocks, and wire fencing with minimal effort. The compound leverage mechanism multiplies your cutting force by a factor of 30, enabling clean cuts through materials up to 10mm in diameter. Hardened alloy steel blades are precisely ground and heat-treated to maintain a sharp edge through years of repeated use on tough materials. Ergonomic rubber grips and the generous 750mm handle length provide excellent control, leverage, and reach during overhead or awkward-angle cuts. An adjustable blade tension screw lets you fine-tune the jaw alignment for optimal cutting performance. Built for demolition crews, locksmiths, fencing contractors, and maintenance professionals who need reliable cutting power day after day.","price":48.41,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7M","by_name":"Michael Dziedzic","by_url":"https:\/\/unsplash.com\/@lazycreekimages","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/pM9pkc9J918","file_name":"pliers03.avif","title":"Bolt cutters"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2DQD17DR3ERTSE1Z2M","name":"Long Nose Pliers","description":"Precision long nose pliers with narrow tapered jaws designed for reaching into tight, confined spaces and bending fine wire with accuracy. Made from chrome vanadium steel with induction-hardened cutting edges that cleanly sever copper, brass, and steel wire without crushing or fraying. The slim jaw profile tapers to a fine point, making these pliers indispensable for electrical terminal work, jewelry making, and intricate mechanical repairs. Bi-component comfort grips minimize hand strain during detailed tasks requiring a steady hand and controlled pressure. The leaf-spring joint returns the handles to the open position automatically, speeding up repetitive tasks. A must-have precision tool trusted by electricians, electronics technicians, and hobbyists worldwide.","price":14.24,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7N","by_name":"Brett Jordan","by_url":"https:\/\/unsplash.com\/@brett_jordan","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/GamuDTVm02g","file_name":"pliers04.avif","title":"Long nose pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2EXDQ749444RB4RAMH","name":"Slip Joint Pliers","description":"Adjustable slip joint pliers that feature a two-position pivot mechanism for switching between regular and wide jaw openings to accommodate different fastener sizes. The PVC-coated handles offer a comfortable, non-slip grip while the precisely machined jaws securely grasp round, flat, and hexagonal objects without slipping. Constructed from durable drop-forged carbon steel that has been heat-treated to withstand heavy daily use in professional environments. The curved jaw section grips pipes and cylindrical objects, while the flat front surface handles nuts, bolts, and sheet materials. A wire cutter integrated near the pivot handles light cutting tasks without reaching for a separate tool. Perfect for plumbing, automotive, HVAC, and general maintenance work where a single versatile gripping tool saves time.","price":9.17,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7P","by_name":"Yasin Hasan","by_url":"https:\/\/unsplash.com\/@yasin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/dwlxTSpfKXg","file_name":"pliers05.avif","title":"Slip joint pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2F4ZF8Y8F7T1EBMA3H","name":"Claw Hammer with Shock Reduction Grip","description":"Ergonomic claw hammer featuring an advanced shock reduction grip system that absorbs up to 70% of impact vibrations, protecting your wrist, elbow, and shoulder during prolonged nailing sessions. The 450g carbon steel head is precision-balanced and heat-treated for maximum hardness, ensuring accurate nail driving with minimal effort on every swing. The curved claw design effortlessly removes nails without damaging surrounding wood surfaces, making it equally useful for construction and renovation work. A fiberglass-reinforced handle combines lightweight strength with exceptional durability that far outlasts traditional wooden handles. The overmolded soft-grip zone conforms to your hand shape for a custom-feeling, fatigue-free hold throughout long working days. Recommended for professional framing, carpentry, and renovation projects where operator comfort matters as much as striking performance.","price":13.41,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7Q","by_name":"iMattSmart","by_url":"https:\/\/unsplash.com\/@imattsmart","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/jaLaLQdkBOE","file_name":"hammer01.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2GD6Q6AVJJSHVS7GKD","name":"Hammer","description":"A dependable standard claw hammer suitable for driving and removing nails in everyday construction, carpentry, and home improvement projects. The 350g carbon steel head is drop-forged and heat-treated for maximum hardness, then fitted to a traditional wooden handle that provides natural shock absorption with each strike. Well-balanced weight distribution between the head and handle ensures accurate strikes with minimal wrist effort, reducing fatigue during repetitive nailing tasks. The polished face resists rust and provides a smooth surface that drives nails cleanly without leaving marks on finish materials. A gently curved claw provides reliable nail extraction leverage without excessive force. This versatile hammer belongs in every toolbox, from professional carpentry workshops to home garages and apartment maintenance kits.","price":12.58,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7R","by_name":"Jozsef Hocza","by_url":"https:\/\/unsplash.com\/@hocza","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/D3nouOYbALc","file_name":"hammer02.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2JAZV07V79R70NNDNX","name":"Claw Hammer","description":"Traditional claw hammer with a polished carbon steel head engineered for driving and removing nails with precision and confidence. The rubber-wrapped handle provides a secure, comfortable grip even in wet, dusty, or cold conditions where bare metal or wood handles would slip. At 500g, it offers the ideal balance between striking power and maneuverability for general carpentry, framing, and construction tasks. The curved claw design allows for smooth nail extraction without gouging or marring wood surfaces, protecting your finished work. The head-to-handle connection uses an epoxy-bonded wedge system that prevents loosening over time. A reliable, no-nonsense tool that professional carpenters and weekend builders alike reach for every day.","price":11.48,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7S","by_name":"Andrew George","by_url":"https:\/\/unsplash.com\/@andrewjoegeorge","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/YU2mCvXR0wA","file_name":"hammer03.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2K9QV3KQSQ6ZBBD61D","name":"Thor Hammer","description":"The legendary Thor Hammer combines premium craftsmanship with raw striking power in a tool that is truly built to last generations. Forged from Uru metal with a hand-wrapped leather grip, this extraordinary 5kg masterpiece delivers unmatched impact force for the most demanding demolition, forging, and heavy construction tasks. The perfectly balanced oversized head ensures every swing transfers maximum energy to the target, while the enlarged striking face covers more surface area than any conventional hammer. Despite its impressive mass, the ergonomic handle design and precise weight distribution allow for surprisingly controlled, accurate swings. This is not merely a tool but a statement piece for those who accept nothing less than the absolute best in their workshop. Comes with a lifetime warranty because true legends never fade. Please note: only one Thor Hammer is permitted per customer.","price":11.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7T","by_name":"ANIRUDH","by_url":"https:\/\/unsplash.com\/@lanirudhreddy","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/3esjG-nlgyk","file_name":"hammer04.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}],"from":1,"last_page":6,"per_page":9,"to":9,"total":50}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Products: 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9f6d8cf1-2ce7-4145-8742-15b9cd3bf2f2 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 13:59:58 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552k2aw0jynek4z20tphp4w"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Cart created: 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | e7c99bc8-a209-4b2a-9538-d93865028e3b |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH28NG35XD8J04PGAJXN",
"quantity": 1
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 13:59:58 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"item added or updated"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Product added: 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 726eab99-d32f-432d-a1ba-542e8df1b82f |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 13:59:59 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"street":"Bozkurtweg","house_number":"218","city":"Wezuperbrug","state":"Drenthe","country":"NL","postcode":"1011 AB"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Lookup: 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | a53d736a-020a-4650-8971-50d6a12a44a6 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 272 |
{
"billing_street": "Teststraat 1",
"billing_city": "Wezuperbrug",
"billing_state": "Drenthe",
"billing_country": "NL",
"billing_postal_code": "1011 AB",
"payment_method": "cash-on-delivery",
"payment_details": {},
"cart_id": "01m552k2aw0jynek4z20tphp4w"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:00 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"billing_street":"Teststraat 1","billing_city":"Wezuperbrug","billing_state":"Drenthe","billing_country":"NL","billing_postal_code":"1011 AB","user_id":"01m552jz1by17vr3sx9zcb1275","invoice_date":"2026-10-17T14:00:00.203080Z","invoice_number":"INV-2026000004","id":"01m552k3yvjyfr0ae67a69ct0f","created_at":"2026-10-17T14:00:00.000000Z","subtotal":14.15,"total":14.15,"additional_discount_percentage":null,"additional_discount_amount":0,"eco_discount_percentage":0,"eco_discount_amount":0}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Order: 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | c3a93e16-4091-4589-9a18-38d5ae2e9508 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:00 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552k4gf7hn8erq3g0c4gdgy"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Cart B created: 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | e59190ab-2b88-4141-98ab-20ee6c2dfae6 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH2AG9122BMKVRF3XH0Z",
"quantity": 1
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:01 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"item added or updated"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Product added: 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 8a0b2b20-b8f3-46a9-a436-85d79df38d83 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 272 |
{
"billing_street": "Teststraat 1",
"billing_city": "Wezuperbrug",
"billing_state": "Drenthe",
"billing_country": "NL",
"billing_postal_code": "1011 AB",
"payment_method": "cash-on-delivery",
"payment_details": {},
"cart_id": "01m552k4gf7hn8erq3g0c4gdgy"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:01 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"billing_street":"Teststraat 1","billing_city":"Wezuperbrug","billing_state":"Drenthe","billing_country":"NL","billing_postal_code":"1011 AB","user_id":"01m552k0pjeydtzqfwz44279eb","invoice_date":"2026-10-17T14:00:01.616497Z","invoice_number":"INV-2026000005","id":"01m552k5aksy1sdgxzfxese023","created_at":"2026-10-17T14:00:01.000000Z","subtotal":12.01,"total":12.01,"additional_discount_percentage":null,"additional_discount_amount":0,"eco_discount_percentage":0,"eco_discount_amount":0}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Order B: 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | b0f780c7-37b2-48f0-a21f-1bd8b2adb972 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json;charset=UTF-8 |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Charset | utf-8 |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:01 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"version":"5.0","environment":"local","app_name":"Toolshop"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Has version, environment, app_name | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 7bbd9e3a-1188-484a-8ff1-3a721bae9829 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:02 GMT |
| ETag | "279a8802f640ba9051528ca11db63517" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2AG9122BMKVRF3XH0Z","name":"Pliers","description":"Reliable general-purpose pliers crafted from drop-forged carbon steel for long-lasting durability in demanding working conditions. The serrated jaws provide a firm grip on a variety of materials including wire, nails, small fasteners, and irregularly shaped objects. Comfortable rubber-coated handles absorb vibration and reduce hand fatigue during extended use, while the non-slip surface ensures confident handling. The precision pivot joint maintains alignment under load, delivering smooth, controlled jaw action with every squeeze. Heat-treated steel construction resists wear and deformation even under heavy use. A must-have foundational tool for any workshop, equally suited for professional tradespeople and home repair projects.","price":12.01,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7K","by_name":"Everyday basics","by_url":"https:\/\/unsplash.com\/@zanardi","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/I8eTuMmxIfo","file_name":"pliers02.avif","title":"Pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2BGG1K6K9GEJTT8GEQ","name":"Bolt Cutters","description":"Heavy-duty bolt cutters engineered to slice through hardened bolts, chains, padlocks, and wire fencing with minimal effort. The compound leverage mechanism multiplies your cutting force by a factor of 30, enabling clean cuts through materials up to 10mm in diameter. Hardened alloy steel blades are precisely ground and heat-treated to maintain a sharp edge through years of repeated use on tough materials. Ergonomic rubber grips and the generous 750mm handle length provide excellent control, leverage, and reach during overhead or awkward-angle cuts. An adjustable blade tension screw lets you fine-tune the jaw alignment for optimal cutting performance. Built for demolition crews, locksmiths, fencing contractors, and maintenance professionals who need reliable cutting power day after day.","price":48.41,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7M","by_name":"Michael Dziedzic","by_url":"https:\/\/unsplash.com\/@lazycreekimages","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/pM9pkc9J918","file_name":"pliers03.avif","title":"Bolt cutters"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2DQD17DR3ERTSE1Z2M","name":"Long Nose Pliers","description":"Precision long nose pliers with narrow tapered jaws designed for reaching into tight, confined spaces and bending fine wire with accuracy. Made from chrome vanadium steel with induction-hardened cutting edges that cleanly sever copper, brass, and steel wire without crushing or fraying. The slim jaw profile tapers to a fine point, making these pliers indispensable for electrical terminal work, jewelry making, and intricate mechanical repairs. Bi-component comfort grips minimize hand strain during detailed tasks requiring a steady hand and controlled pressure. The leaf-spring joint returns the handles to the open position automatically, speeding up repetitive tasks. A must-have precision tool trusted by electricians, electronics technicians, and hobbyists worldwide.","price":14.24,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7N","by_name":"Brett Jordan","by_url":"https:\/\/unsplash.com\/@brett_jordan","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/GamuDTVm02g","file_name":"pliers04.avif","title":"Long nose pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2EXDQ749444RB4RAMH","name":"Slip Joint Pliers","description":"Adjustable slip joint pliers that feature a two-position pivot mechanism for switching between regular and wide jaw openings to accommodate different fastener sizes. The PVC-coated handles offer a comfortable, non-slip grip while the precisely machined jaws securely grasp round, flat, and hexagonal objects without slipping. Constructed from durable drop-forged carbon steel that has been heat-treated to withstand heavy daily use in professional environments. The curved jaw section grips pipes and cylindrical objects, while the flat front surface handles nuts, bolts, and sheet materials. A wire cutter integrated near the pivot handles light cutting tasks without reaching for a separate tool. Perfect for plumbing, automotive, HVAC, and general maintenance work where a single versatile gripping tool saves time.","price":9.17,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7P","by_name":"Yasin Hasan","by_url":"https:\/\/unsplash.com\/@yasin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/dwlxTSpfKXg","file_name":"pliers05.avif","title":"Slip joint pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2F4ZF8Y8F7T1EBMA3H","name":"Claw Hammer with Shock Reduction Grip","description":"Ergonomic claw hammer featuring an advanced shock reduction grip system that absorbs up to 70% of impact vibrations, protecting your wrist, elbow, and shoulder during prolonged nailing sessions. The 450g carbon steel head is precision-balanced and heat-treated for maximum hardness, ensuring accurate nail driving with minimal effort on every swing. The curved claw design effortlessly removes nails without damaging surrounding wood surfaces, making it equally useful for construction and renovation work. A fiberglass-reinforced handle combines lightweight strength with exceptional durability that far outlasts traditional wooden handles. The overmolded soft-grip zone conforms to your hand shape for a custom-feeling, fatigue-free hold throughout long working days. Recommended for professional framing, carpentry, and renovation projects where operator comfort matters as much as striking performance.","price":13.41,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7Q","by_name":"iMattSmart","by_url":"https:\/\/unsplash.com\/@imattsmart","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/jaLaLQdkBOE","file_name":"hammer01.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2GD6Q6AVJJSHVS7GKD","name":"Hammer","description":"A dependable standard claw hammer suitable for driving and removing nails in everyday construction, carpentry, and home improvement projects. The 350g carbon steel head is drop-forged and heat-treated for maximum hardness, then fitted to a traditional wooden handle that provides natural shock absorption with each strike. Well-balanced weight distribution between the head and handle ensures accurate strikes with minimal wrist effort, reducing fatigue during repetitive nailing tasks. The polished face resists rust and provides a smooth surface that drives nails cleanly without leaving marks on finish materials. A gently curved claw provides reliable nail extraction leverage without excessive force. This versatile hammer belongs in every toolbox, from professional carpentry workshops to home garages and apartment maintenance kits.","price":12.58,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7R","by_name":"Jozsef Hocza","by_url":"https:\/\/unsplash.com\/@hocza","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/D3nouOYbALc","file_name":"hammer02.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2JAZV07V79R70NNDNX","name":"Claw Hammer","description":"Traditional claw hammer with a polished carbon steel head engineered for driving and removing nails with precision and confidence. The rubber-wrapped handle provides a secure, comfortable grip even in wet, dusty, or cold conditions where bare metal or wood handles would slip. At 500g, it offers the ideal balance between striking power and maneuverability for general carpentry, framing, and construction tasks. The curved claw design allows for smooth nail extraction without gouging or marring wood surfaces, protecting your finished work. The head-to-handle connection uses an epoxy-bonded wedge system that prevents loosening over time. A reliable, no-nonsense tool that professional carpenters and weekend builders alike reach for every day.","price":11.48,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7S","by_name":"Andrew George","by_url":"https:\/\/unsplash.com\/@andrewjoegeorge","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/YU2mCvXR0wA","file_name":"hammer03.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2K9QV3KQSQ6ZBBD61D","name":"Thor Hammer","description":"The legendary Thor Hammer combines premium craftsmanship with raw striking power in a tool that is truly built to last generations. Forged from Uru metal with a hand-wrapped leather grip, this extraordinary 5kg masterpiece delivers unmatched impact force for the most demanding demolition, forging, and heavy construction tasks. The perfectly balanced oversized head ensures every swing transfers maximum energy to the target, while the enlarged striking face covers more surface area than any conventional hammer. Despite its impressive mass, the ergonomic handle design and precise weight distribution allow for surprisingly controlled, accurate swings. This is not merely a tool but a statement piece for those who accept nothing less than the absolute best in their workshop. Comes with a lifetime warranty because true legends never fade. Please note: only one Thor Hammer is permitted per customer.","price":11.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7T","by_name":"ANIRUDH","by_url":"https:\/\/unsplash.com\/@lanirudhreddy","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/3esjG-nlgyk","file_name":"hammer04.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}],"from":1,"last_page":6,"per_page":9,"to":9,"total":50}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| data not empty | 1 | 0 | 0 |
| Pagination fields | 1 | 0 | 0 |
| Each product has id, name, price | 1 | 0 | 0 |
| Total | 4 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 685a5d0f-24c7-41a1-b6b3-0cd7a37a6df1 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:02 GMT |
| ETag | "7c621aee46bfd58b8d9cbcca45d560bb" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers","parent_id":"01M552JH0THC23EZ570GKVAFFH"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"},"specs":[{"id":"01M552JH6P79413ZXA0S6SD6KS","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Handle Material","spec_value":"Bi-component","spec_unit":null},{"id":"01M552JH6P79413ZXA0S6SD6KQ","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Length","spec_value":"200","spec_unit":"mm"},{"id":"01M552JH6P79413ZXA0S6SD6KR","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Material","spec_value":"Chrome Vanadium Steel","spec_unit":null},{"id":"01M552JH6P79413ZXA0S6SD6KT","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Warranty","spec_value":"2","spec_unit":"years"},{"id":"01M552JH6P79413ZXA0S6SD6KP","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Weight","spec_value":"340","spec_unit":"g"}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Correct id | 1 | 0 | 0 |
| Has name, price, category, brand | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | baf5e8ea-023e-4171-b607-9a5d0fb18ff1 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:02 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Requested item not found"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 404 | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 45ee635b-4d9d-4c8a-8ae5-36df2d078231 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:03 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Requested item not found"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [404, 422] | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 952e43d1-acb7-4ebb-9081-673dc3fe4d46 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:03 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Requested item not found"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [404, 422] | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 477f31ab-2472-490f-b331-c794a544b412 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:03 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Requested item not found"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [404, 422] | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 0bf11a96-a072-498a-ae38-bd63daad1b2f |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:04 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Requested item not found"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [404, 422] | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 5c67d588-dd85-4289-881e-510dc72277fa |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:04 GMT |
| ETag | "bc4c4cad09ccfe07432c4d71b42e3014" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JH2F4ZF8Y8F7T1EBMA3H","name":"Claw Hammer with Shock Reduction Grip","description":"Ergonomic claw hammer featuring an advanced shock reduction grip system that absorbs up to 70% of impact vibrations, protecting your wrist, elbow, and shoulder during prolonged nailing sessions. The 450g carbon steel head is precision-balanced and heat-treated for maximum hardness, ensuring accurate nail driving with minimal effort on every swing. The curved claw design effortlessly removes nails without damaging surrounding wood surfaces, making it equally useful for construction and renovation work. A fiberglass-reinforced handle combines lightweight strength with exceptional durability that far outlasts traditional wooden handles. The overmolded soft-grip zone conforms to your hand shape for a custom-feeling, fatigue-free hold throughout long working days. Recommended for professional framing, carpentry, and renovation projects where operator comfort matters as much as striking performance.","price":13.41,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7Q","by_name":"iMattSmart","by_url":"https:\/\/unsplash.com\/@imattsmart","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/jaLaLQdkBOE","file_name":"hammer01.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2GD6Q6AVJJSHVS7GKD","name":"Hammer","description":"A dependable standard claw hammer suitable for driving and removing nails in everyday construction, carpentry, and home improvement projects. The 350g carbon steel head is drop-forged and heat-treated for maximum hardness, then fitted to a traditional wooden handle that provides natural shock absorption with each strike. Well-balanced weight distribution between the head and handle ensures accurate strikes with minimal wrist effort, reducing fatigue during repetitive nailing tasks. The polished face resists rust and provides a smooth surface that drives nails cleanly without leaving marks on finish materials. A gently curved claw provides reliable nail extraction leverage without excessive force. This versatile hammer belongs in every toolbox, from professional carpentry workshops to home garages and apartment maintenance kits.","price":12.58,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7R","by_name":"Jozsef Hocza","by_url":"https:\/\/unsplash.com\/@hocza","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/D3nouOYbALc","file_name":"hammer02.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2JAZV07V79R70NNDNX","name":"Claw Hammer","description":"Traditional claw hammer with a polished carbon steel head engineered for driving and removing nails with precision and confidence. The rubber-wrapped handle provides a secure, comfortable grip even in wet, dusty, or cold conditions where bare metal or wood handles would slip. At 500g, it offers the ideal balance between striking power and maneuverability for general carpentry, framing, and construction tasks. The curved claw design allows for smooth nail extraction without gouging or marring wood surfaces, protecting your finished work. The head-to-handle connection uses an epoxy-bonded wedge system that prevents loosening over time. A reliable, no-nonsense tool that professional carpenters and weekend builders alike reach for every day.","price":11.48,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7S","by_name":"Andrew George","by_url":"https:\/\/unsplash.com\/@andrewjoegeorge","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/YU2mCvXR0wA","file_name":"hammer03.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2K9QV3KQSQ6ZBBD61D","name":"Thor Hammer","description":"The legendary Thor Hammer combines premium craftsmanship with raw striking power in a tool that is truly built to last generations. Forged from Uru metal with a hand-wrapped leather grip, this extraordinary 5kg masterpiece delivers unmatched impact force for the most demanding demolition, forging, and heavy construction tasks. The perfectly balanced oversized head ensures every swing transfers maximum energy to the target, while the enlarged striking face covers more surface area than any conventional hammer. Despite its impressive mass, the ergonomic handle design and precise weight distribution allow for surprisingly controlled, accurate swings. This is not merely a tool but a statement piece for those who accept nothing less than the absolute best in their workshop. Comes with a lifetime warranty because true legends never fade. Please note: only one Thor Hammer is permitted per customer.","price":11.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7T","by_name":"ANIRUDH","by_url":"https:\/\/unsplash.com\/@lanirudhreddy","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/3esjG-nlgyk","file_name":"hammer04.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2PMYE5DXP9X6JJ29E0","name":"Claw Hammer with Fiberglass Handle","description":"Modern claw hammer featuring a durable fiberglass handle that outlasts wood, absorbs vibration more effectively, and shrugs off moisture without swelling, cracking, or loosening over time. The 400g carbon steel head is drop-forged and heat-treated to optimal hardness for reliable nail driving in softwood, hardwood, and engineered lumber. The fiberglass core is permanently bonded to the head and encased in a comfortable overmold grip that prevents slipping even when wet or oily. A magnetic nail starter near the head allows one-handed nail placement, freeing your other hand to hold materials in position. The curved claw provides smooth, controlled nail extraction with excellent leverage. Ideal for contractors and DIY builders who want a weather-resistant, maintenance-free hammer that performs reliably on every job site and in any season.","price":20.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7W","by_name":"Jonny Gios","by_url":"https:\/\/unsplash.com\/@supergios","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/ARaYGFeuwpU","file_name":"hammer06.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2QEYQXSH3VVTVKM55B","name":"Court Hammer","description":"Compact precision court hammer with a 300g carbon steel head designed for light-duty nailing, tapping dowels, and delicate assembly tasks where a full-size hammer would be too heavy and unwieldy. The short 280mm wooden handle provides excellent close-quarters control for detailed work in confined spaces such as cabinets, closets, and furniture interiors. The polished flat face drives small nails and brads without bending them, while the cross-peen on the opposite side is useful for starting small fasteners between your fingers. Perfectly weighted to provide enough force for trim carpentry and light framing without damaging delicate surfaces. The lacquered wooden handle resists moisture absorption and provides a warm, comfortable grip. A handy addition to any toolkit when precision and finesse matter more than raw striking power.","price":18.63,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7X","by_name":"Wesley Tingey","by_url":"https:\/\/unsplash.com\/@wesleyphotography","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/9z9fxr_7Z-k","file_name":"hammer07.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}],"from":1,"last_page":1,"per_page":9,"to":6,"total":6}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Results found | 1 | 0 | 0 |
| Each name contains the term | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 182ab638-97c7-4eed-9c5b-252bc7757b4b |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:04 GMT |
| ETag | "5b9bc7235ce5ec229115859c1e170b7f" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[],"from":null,"last_page":1,"per_page":9,"to":null,"total":0}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Empty list | 1 | 0 | 0 |
| total = 0 | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | e6af2735-635d-4b22-b5eb-44225ee7d7a6 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:05 GMT |
| ETag | "2b620d9948f089707e0000006ccbfb7e" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JH2F4ZF8Y8F7T1EBMA3H","name":"Claw Hammer with Shock Reduction Grip","description":"Ergonomic claw hammer featuring an advanced shock reduction grip system that absorbs up to 70% of impact vibrations, protecting your wrist, elbow, and shoulder during prolonged nailing sessions. The 450g carbon steel head is precision-balanced and heat-treated for maximum hardness, ensuring accurate nail driving with minimal effort on every swing. The curved claw design effortlessly removes nails without damaging surrounding wood surfaces, making it equally useful for construction and renovation work. A fiberglass-reinforced handle combines lightweight strength with exceptional durability that far outlasts traditional wooden handles. The overmolded soft-grip zone conforms to your hand shape for a custom-feeling, fatigue-free hold throughout long working days. Recommended for professional framing, carpentry, and renovation projects where operator comfort matters as much as striking performance.","price":13.41,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7Q","by_name":"iMattSmart","by_url":"https:\/\/unsplash.com\/@imattsmart","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/jaLaLQdkBOE","file_name":"hammer01.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2GD6Q6AVJJSHVS7GKD","name":"Hammer","description":"A dependable standard claw hammer suitable for driving and removing nails in everyday construction, carpentry, and home improvement projects. The 350g carbon steel head is drop-forged and heat-treated for maximum hardness, then fitted to a traditional wooden handle that provides natural shock absorption with each strike. Well-balanced weight distribution between the head and handle ensures accurate strikes with minimal wrist effort, reducing fatigue during repetitive nailing tasks. The polished face resists rust and provides a smooth surface that drives nails cleanly without leaving marks on finish materials. A gently curved claw provides reliable nail extraction leverage without excessive force. This versatile hammer belongs in every toolbox, from professional carpentry workshops to home garages and apartment maintenance kits.","price":12.58,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7R","by_name":"Jozsef Hocza","by_url":"https:\/\/unsplash.com\/@hocza","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/D3nouOYbALc","file_name":"hammer02.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2JAZV07V79R70NNDNX","name":"Claw Hammer","description":"Traditional claw hammer with a polished carbon steel head engineered for driving and removing nails with precision and confidence. The rubber-wrapped handle provides a secure, comfortable grip even in wet, dusty, or cold conditions where bare metal or wood handles would slip. At 500g, it offers the ideal balance between striking power and maneuverability for general carpentry, framing, and construction tasks. The curved claw design allows for smooth nail extraction without gouging or marring wood surfaces, protecting your finished work. The head-to-handle connection uses an epoxy-bonded wedge system that prevents loosening over time. A reliable, no-nonsense tool that professional carpenters and weekend builders alike reach for every day.","price":11.48,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7S","by_name":"Andrew George","by_url":"https:\/\/unsplash.com\/@andrewjoegeorge","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/YU2mCvXR0wA","file_name":"hammer03.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2K9QV3KQSQ6ZBBD61D","name":"Thor Hammer","description":"The legendary Thor Hammer combines premium craftsmanship with raw striking power in a tool that is truly built to last generations. Forged from Uru metal with a hand-wrapped leather grip, this extraordinary 5kg masterpiece delivers unmatched impact force for the most demanding demolition, forging, and heavy construction tasks. The perfectly balanced oversized head ensures every swing transfers maximum energy to the target, while the enlarged striking face covers more surface area than any conventional hammer. Despite its impressive mass, the ergonomic handle design and precise weight distribution allow for surprisingly controlled, accurate swings. This is not merely a tool but a statement piece for those who accept nothing less than the absolute best in their workshop. Comes with a lifetime warranty because true legends never fade. Please note: only one Thor Hammer is permitted per customer.","price":11.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7T","by_name":"ANIRUDH","by_url":"https:\/\/unsplash.com\/@lanirudhreddy","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/3esjG-nlgyk","file_name":"hammer04.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2MMVA7GAB33HSXMKWQ","name":"Sledgehammer","description":"Powerful sledgehammer designed for heavy demolition, driving stakes, breaking concrete, and splitting masonry with devastating efficiency. The 3.6kg forged steel head delivers tremendous impact force concentrated through a hardened striking face that resists chipping and mushrooming. A 900mm fiberglass handle provides excellent shock absorption, superior reach, and the flexibility needed to generate maximum swing velocity. Anti-vibration technology embedded in the handle dampens recoil forces, significantly reducing operator fatigue during extended demolition sessions. The overmolded grip zone prevents the handle from twisting or slipping out of sweaty or gloved hands during overhead swings. Built for construction workers, landscapers, and demolition crews who demand professional-grade striking tools that perform reliably under the most punishing conditions.","price":17.75,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7V","by_name":"Fausto Marqués","by_url":"https:\/\/unsplash.com\/@faustomarques","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/A9dq-L3zzHA","file_name":"hammer05.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2PMYE5DXP9X6JJ29E0","name":"Claw Hammer with Fiberglass Handle","description":"Modern claw hammer featuring a durable fiberglass handle that outlasts wood, absorbs vibration more effectively, and shrugs off moisture without swelling, cracking, or loosening over time. The 400g carbon steel head is drop-forged and heat-treated to optimal hardness for reliable nail driving in softwood, hardwood, and engineered lumber. The fiberglass core is permanently bonded to the head and encased in a comfortable overmold grip that prevents slipping even when wet or oily. A magnetic nail starter near the head allows one-handed nail placement, freeing your other hand to hold materials in position. The curved claw provides smooth, controlled nail extraction with excellent leverage. Ideal for contractors and DIY builders who want a weather-resistant, maintenance-free hammer that performs reliably on every job site and in any season.","price":20.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7W","by_name":"Jonny Gios","by_url":"https:\/\/unsplash.com\/@supergios","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/ARaYGFeuwpU","file_name":"hammer06.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2QEYQXSH3VVTVKM55B","name":"Court Hammer","description":"Compact precision court hammer with a 300g carbon steel head designed for light-duty nailing, tapping dowels, and delicate assembly tasks where a full-size hammer would be too heavy and unwieldy. The short 280mm wooden handle provides excellent close-quarters control for detailed work in confined spaces such as cabinets, closets, and furniture interiors. The polished flat face drives small nails and brads without bending them, while the cross-peen on the opposite side is useful for starting small fasteners between your fingers. Perfectly weighted to provide enough force for trim carpentry and light framing without damaging delicate surfaces. The lacquered wooden handle resists moisture absorption and provides a warm, comfortable grip. A handy addition to any toolkit when precision and finesse matter more than raw striking power.","price":18.63,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7X","by_name":"Wesley Tingey","by_url":"https:\/\/unsplash.com\/@wesleyphotography","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/9z9fxr_7Z-k","file_name":"hammer07.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}],"from":1,"last_page":1,"per_page":9,"to":7,"total":7}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| Does not return the whole catalog | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | bfefd612-9b1e-43cd-afaa-d65078bf2dd9 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:05 GMT |
| ETag | "bc4c4cad09ccfe07432c4d71b42e3014" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JH2F4ZF8Y8F7T1EBMA3H","name":"Claw Hammer with Shock Reduction Grip","description":"Ergonomic claw hammer featuring an advanced shock reduction grip system that absorbs up to 70% of impact vibrations, protecting your wrist, elbow, and shoulder during prolonged nailing sessions. The 450g carbon steel head is precision-balanced and heat-treated for maximum hardness, ensuring accurate nail driving with minimal effort on every swing. The curved claw design effortlessly removes nails without damaging surrounding wood surfaces, making it equally useful for construction and renovation work. A fiberglass-reinforced handle combines lightweight strength with exceptional durability that far outlasts traditional wooden handles. The overmolded soft-grip zone conforms to your hand shape for a custom-feeling, fatigue-free hold throughout long working days. Recommended for professional framing, carpentry, and renovation projects where operator comfort matters as much as striking performance.","price":13.41,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7Q","by_name":"iMattSmart","by_url":"https:\/\/unsplash.com\/@imattsmart","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/jaLaLQdkBOE","file_name":"hammer01.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2GD6Q6AVJJSHVS7GKD","name":"Hammer","description":"A dependable standard claw hammer suitable for driving and removing nails in everyday construction, carpentry, and home improvement projects. The 350g carbon steel head is drop-forged and heat-treated for maximum hardness, then fitted to a traditional wooden handle that provides natural shock absorption with each strike. Well-balanced weight distribution between the head and handle ensures accurate strikes with minimal wrist effort, reducing fatigue during repetitive nailing tasks. The polished face resists rust and provides a smooth surface that drives nails cleanly without leaving marks on finish materials. A gently curved claw provides reliable nail extraction leverage without excessive force. This versatile hammer belongs in every toolbox, from professional carpentry workshops to home garages and apartment maintenance kits.","price":12.58,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7R","by_name":"Jozsef Hocza","by_url":"https:\/\/unsplash.com\/@hocza","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/D3nouOYbALc","file_name":"hammer02.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2JAZV07V79R70NNDNX","name":"Claw Hammer","description":"Traditional claw hammer with a polished carbon steel head engineered for driving and removing nails with precision and confidence. The rubber-wrapped handle provides a secure, comfortable grip even in wet, dusty, or cold conditions where bare metal or wood handles would slip. At 500g, it offers the ideal balance between striking power and maneuverability for general carpentry, framing, and construction tasks. The curved claw design allows for smooth nail extraction without gouging or marring wood surfaces, protecting your finished work. The head-to-handle connection uses an epoxy-bonded wedge system that prevents loosening over time. A reliable, no-nonsense tool that professional carpenters and weekend builders alike reach for every day.","price":11.48,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7S","by_name":"Andrew George","by_url":"https:\/\/unsplash.com\/@andrewjoegeorge","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/YU2mCvXR0wA","file_name":"hammer03.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2K9QV3KQSQ6ZBBD61D","name":"Thor Hammer","description":"The legendary Thor Hammer combines premium craftsmanship with raw striking power in a tool that is truly built to last generations. Forged from Uru metal with a hand-wrapped leather grip, this extraordinary 5kg masterpiece delivers unmatched impact force for the most demanding demolition, forging, and heavy construction tasks. The perfectly balanced oversized head ensures every swing transfers maximum energy to the target, while the enlarged striking face covers more surface area than any conventional hammer. Despite its impressive mass, the ergonomic handle design and precise weight distribution allow for surprisingly controlled, accurate swings. This is not merely a tool but a statement piece for those who accept nothing less than the absolute best in their workshop. Comes with a lifetime warranty because true legends never fade. Please note: only one Thor Hammer is permitted per customer.","price":11.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7T","by_name":"ANIRUDH","by_url":"https:\/\/unsplash.com\/@lanirudhreddy","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/3esjG-nlgyk","file_name":"hammer04.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2PMYE5DXP9X6JJ29E0","name":"Claw Hammer with Fiberglass Handle","description":"Modern claw hammer featuring a durable fiberglass handle that outlasts wood, absorbs vibration more effectively, and shrugs off moisture without swelling, cracking, or loosening over time. The 400g carbon steel head is drop-forged and heat-treated to optimal hardness for reliable nail driving in softwood, hardwood, and engineered lumber. The fiberglass core is permanently bonded to the head and encased in a comfortable overmold grip that prevents slipping even when wet or oily. A magnetic nail starter near the head allows one-handed nail placement, freeing your other hand to hold materials in position. The curved claw provides smooth, controlled nail extraction with excellent leverage. Ideal for contractors and DIY builders who want a weather-resistant, maintenance-free hammer that performs reliably on every job site and in any season.","price":20.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7W","by_name":"Jonny Gios","by_url":"https:\/\/unsplash.com\/@supergios","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/ARaYGFeuwpU","file_name":"hammer06.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2QEYQXSH3VVTVKM55B","name":"Court Hammer","description":"Compact precision court hammer with a 300g carbon steel head designed for light-duty nailing, tapping dowels, and delicate assembly tasks where a full-size hammer would be too heavy and unwieldy. The short 280mm wooden handle provides excellent close-quarters control for detailed work in confined spaces such as cabinets, closets, and furniture interiors. The polished flat face drives small nails and brads without bending them, while the cross-peen on the opposite side is useful for starting small fasteners between your fingers. Perfectly weighted to provide enough force for trim carpentry and light framing without damaging delicate surfaces. The lacquered wooden handle resists moisture absorption and provides a warm, comfortable grip. A handy addition to any toolkit when precision and finesse matter more than raw striking power.","price":18.63,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7X","by_name":"Wesley Tingey","by_url":"https:\/\/unsplash.com\/@wesleyphotography","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/9z9fxr_7Z-k","file_name":"hammer07.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}],"from":1,"last_page":1,"per_page":9,"to":6,"total":6}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| Does not return the whole catalog | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | b5a2cec9-28c9-4135-a8c8-ac52d99aa55e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:05 GMT |
| ETag | "bc4c4cad09ccfe07432c4d71b42e3014" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JH2F4ZF8Y8F7T1EBMA3H","name":"Claw Hammer with Shock Reduction Grip","description":"Ergonomic claw hammer featuring an advanced shock reduction grip system that absorbs up to 70% of impact vibrations, protecting your wrist, elbow, and shoulder during prolonged nailing sessions. The 450g carbon steel head is precision-balanced and heat-treated for maximum hardness, ensuring accurate nail driving with minimal effort on every swing. The curved claw design effortlessly removes nails without damaging surrounding wood surfaces, making it equally useful for construction and renovation work. A fiberglass-reinforced handle combines lightweight strength with exceptional durability that far outlasts traditional wooden handles. The overmolded soft-grip zone conforms to your hand shape for a custom-feeling, fatigue-free hold throughout long working days. Recommended for professional framing, carpentry, and renovation projects where operator comfort matters as much as striking performance.","price":13.41,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7Q","by_name":"iMattSmart","by_url":"https:\/\/unsplash.com\/@imattsmart","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/jaLaLQdkBOE","file_name":"hammer01.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2GD6Q6AVJJSHVS7GKD","name":"Hammer","description":"A dependable standard claw hammer suitable for driving and removing nails in everyday construction, carpentry, and home improvement projects. The 350g carbon steel head is drop-forged and heat-treated for maximum hardness, then fitted to a traditional wooden handle that provides natural shock absorption with each strike. Well-balanced weight distribution between the head and handle ensures accurate strikes with minimal wrist effort, reducing fatigue during repetitive nailing tasks. The polished face resists rust and provides a smooth surface that drives nails cleanly without leaving marks on finish materials. A gently curved claw provides reliable nail extraction leverage without excessive force. This versatile hammer belongs in every toolbox, from professional carpentry workshops to home garages and apartment maintenance kits.","price":12.58,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7R","by_name":"Jozsef Hocza","by_url":"https:\/\/unsplash.com\/@hocza","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/D3nouOYbALc","file_name":"hammer02.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2JAZV07V79R70NNDNX","name":"Claw Hammer","description":"Traditional claw hammer with a polished carbon steel head engineered for driving and removing nails with precision and confidence. The rubber-wrapped handle provides a secure, comfortable grip even in wet, dusty, or cold conditions where bare metal or wood handles would slip. At 500g, it offers the ideal balance between striking power and maneuverability for general carpentry, framing, and construction tasks. The curved claw design allows for smooth nail extraction without gouging or marring wood surfaces, protecting your finished work. The head-to-handle connection uses an epoxy-bonded wedge system that prevents loosening over time. A reliable, no-nonsense tool that professional carpenters and weekend builders alike reach for every day.","price":11.48,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7S","by_name":"Andrew George","by_url":"https:\/\/unsplash.com\/@andrewjoegeorge","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/YU2mCvXR0wA","file_name":"hammer03.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2K9QV3KQSQ6ZBBD61D","name":"Thor Hammer","description":"The legendary Thor Hammer combines premium craftsmanship with raw striking power in a tool that is truly built to last generations. Forged from Uru metal with a hand-wrapped leather grip, this extraordinary 5kg masterpiece delivers unmatched impact force for the most demanding demolition, forging, and heavy construction tasks. The perfectly balanced oversized head ensures every swing transfers maximum energy to the target, while the enlarged striking face covers more surface area than any conventional hammer. Despite its impressive mass, the ergonomic handle design and precise weight distribution allow for surprisingly controlled, accurate swings. This is not merely a tool but a statement piece for those who accept nothing less than the absolute best in their workshop. Comes with a lifetime warranty because true legends never fade. Please note: only one Thor Hammer is permitted per customer.","price":11.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7T","by_name":"ANIRUDH","by_url":"https:\/\/unsplash.com\/@lanirudhreddy","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/3esjG-nlgyk","file_name":"hammer04.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2PMYE5DXP9X6JJ29E0","name":"Claw Hammer with Fiberglass Handle","description":"Modern claw hammer featuring a durable fiberglass handle that outlasts wood, absorbs vibration more effectively, and shrugs off moisture without swelling, cracking, or loosening over time. The 400g carbon steel head is drop-forged and heat-treated to optimal hardness for reliable nail driving in softwood, hardwood, and engineered lumber. The fiberglass core is permanently bonded to the head and encased in a comfortable overmold grip that prevents slipping even when wet or oily. A magnetic nail starter near the head allows one-handed nail placement, freeing your other hand to hold materials in position. The curved claw provides smooth, controlled nail extraction with excellent leverage. Ideal for contractors and DIY builders who want a weather-resistant, maintenance-free hammer that performs reliably on every job site and in any season.","price":20.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7W","by_name":"Jonny Gios","by_url":"https:\/\/unsplash.com\/@supergios","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/ARaYGFeuwpU","file_name":"hammer06.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2QEYQXSH3VVTVKM55B","name":"Court Hammer","description":"Compact precision court hammer with a 300g carbon steel head designed for light-duty nailing, tapping dowels, and delicate assembly tasks where a full-size hammer would be too heavy and unwieldy. The short 280mm wooden handle provides excellent close-quarters control for detailed work in confined spaces such as cabinets, closets, and furniture interiors. The polished flat face drives small nails and brads without bending them, while the cross-peen on the opposite side is useful for starting small fasteners between your fingers. Perfectly weighted to provide enough force for trim carpentry and light framing without damaging delicate surfaces. The lacquered wooden handle resists moisture absorption and provides a warm, comfortable grip. A handy addition to any toolkit when precision and finesse matter more than raw striking power.","price":18.63,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7X","by_name":"Wesley Tingey","by_url":"https:\/\/unsplash.com\/@wesleyphotography","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/9z9fxr_7Z-k","file_name":"hammer07.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}],"from":1,"last_page":1,"per_page":9,"to":6,"total":6}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| Does not return the whole catalog | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | e921ae99-0fc1-422a-9d73-c9bf74dcff0a |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:06 GMT |
| ETag | "5b9bc7235ce5ec229115859c1e170b7f" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[],"from":null,"last_page":1,"per_page":9,"to":null,"total":0}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| Does not return the whole catalog | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 22355a8e-ea70-460d-849c-f28f6c59cfdc |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:06 GMT |
| ETag | "5b9bc7235ce5ec229115859c1e170b7f" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[],"from":null,"last_page":1,"per_page":9,"to":null,"total":0}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| Does not return the whole catalog | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 2c4e253b-ad17-46ef-a26e-a548110d2f30 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:06 GMT |
| ETag | "5b9bc7235ce5ec229115859c1e170b7f" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[],"from":null,"last_page":1,"per_page":9,"to":null,"total":0}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| Does not return the whole catalog | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | a0fd02f5-58e6-43fa-9734-0d6327962812 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:07 GMT |
| ETag | "5b9bc7235ce5ec229115859c1e170b7f" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[],"from":null,"last_page":1,"per_page":9,"to":null,"total":0}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| Does not return the whole catalog | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | ee955dd8-fa31-40b1-a44f-0d5f1f1044c4 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:07 GMT |
| ETag | "8380abb84bae0fefe1332cf741b5a8b0" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JH3N299RA449M1GN9TP9","name":"Washers","description":"Assorted pack of 150 zinc-plated steel flat washers in popular metric sizes ranging from M4 to M10, covering the most commonly needed sizes for workshop, garage, and job site fastener work. These washers distribute the clamping force of bolts and nuts over a larger surface area, preventing damage to soft materials like wood, plastic, and painted or powder-coated metal surfaces. The smooth, burr-free finish on both faces ensures a flat, stable seating surface that maximizes friction and prevents fastener loosening under vibration. Each washer is stamped from precision-rolled steel strip to consistent thickness tolerances, ensuring predictable bolt stretch and joint behavior across multiple fastening points. The zinc plating provides reliable corrosion protection for indoor use and sheltered outdoor applications. An indispensable consumable for any workshop, garage, or maintenance department handling regular fastener assembly and repair work.","price":3.55,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG90","by_name":"Robert Ruggiero","by_url":"https:\/\/unsplash.com\/@robert2301","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/a-pile-of-different-colored-washers-sitting-on-top-of-a-table-oY6774he6GQ","file_name":"fasteners06.avif","title":"Washers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWR","name":"Fasteners","slug":"fasteners"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3JEY7M0EX8ARR7W163","name":"Flat-Head Wood Screws","description":"Pack of 75 countersink flat-head wood screws in 4x40mm size, crafted from yellow zinc-plated steel for enhanced moisture resistance in both interior and sheltered exterior woodworking applications. The 82-degree countersink flat head sits perfectly flush with the timber surface for a clean, professional finish that can be painted, stained, or filled invisibly. Deep single-lead threads are designed to bite aggressively into both hardwood and softwood fibers for superior holding power that resists pull-out under load and vibration. The sharp gimlet point self-starts without pre-drilling in most softwoods, while a pilot hole is recommended for hardwoods to prevent splitting near edges. The yellow zinc coating provides a warm color that blends naturally with light-colored timbers. Perfect for furniture assembly, deck building, cabinet construction, and general woodworking joinery where appearance matters.","price":3.95,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8Y","by_name":"Ben Lodge","by_url":"https:\/\/unsplash.com\/@benlodge123","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/stainless-steel-11-screw-e3Y7qB67aow","file_name":"fasteners04.avif","title":"Flat-Head Wood Screws"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWR","name":"Fasteners","slug":"fasteners"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3M975R6GFDETHAGPMH","name":"M4 Nuts","description":"Box of 100 M4 hexagonal nuts manufactured from A2-grade austenitic stainless steel for excellent resistance to rust, tarnishing, and corrosion in demanding indoor and outdoor environments. The precisely machined internal threads ensure smooth, easy engagement with M4 bolts, machine screws, and threaded rod without cross-threading or binding. The standard DIN 934 hex profile is compatible with 7mm sockets, open-end spanners, and adjustable wrenches for convenient tightening with any common hand or power tool. Chamfered edges on both faces allow the nut to start on the bolt thread from either direction, saving time during repetitive assembly operations. Consistent dimensional accuracy across all 100 pieces means reliable torque values and clamping forces in every joint. Essential workshop consumables for assembly, prototyping, equipment repair, and maintenance projects across mechanical, electrical, and general engineering trades.","price":4.65,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8Z","by_name":"Mika Baumeister","by_url":"https:\/\/unsplash.com\/@kommumikation","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/silver-and-black-round-coins-c71yQepDEjo","file_name":"fasteners05.avif","title":"M4 Nuts"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWR","name":"Fasteners","slug":"fasteners"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2X1B4SZQRX6712VYYF","name":"Phillips Screwdriver","description":"Professional-quality Phillips screwdriver with a PH2 tip precision-machined from chrome vanadium steel and vapor-blasted for maximum grip inside cross-head screw recesses. The bi-component handle features a soft-grip comfort zone that absorbs torque reaction and vibration, combined with a hard polypropylene core that transmits maximum turning force to the blade. A hex bolster machined into the shaft just above the handle allows a wrench to be applied for additional turning leverage on stubborn or over-tightened screws. The round blade shaft is chrome-plated for corrosion resistance and easy cleaning after use in greasy or painted environments. A hanging hole in the handle allows convenient pegboard or hook storage for quick identification and access. Suitable for electricians, cabinet makers, assembly technicians, and anyone who needs a reliable, comfortable everyday screwdriver.","price":4.92,"is_location_offer":true,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG82","by_name":"Tekton","by_url":"https:\/\/unsplash.com\/@tekton_tools","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/jlY6nV_STIw","file_name":"screwdriver01.avif","title":"Phillips Screwdriver"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWC","name":"Screwdriver","slug":"screwdriver"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3GSWXWW1S5BXERHWR7","name":"Nuts and bolts","description":"Comprehensive assorted set of 200 stainless steel nuts and bolts in popular metric sizes ranging from M3 to M10, providing a one-stop selection for repair, assembly, prototyping, and maintenance tasks across all trades. The 18-8 austenitic stainless steel composition delivers excellent corrosion resistance for both indoor and outdoor applications, including marine, food-processing, and chemical environments where carbon steel would quickly deteriorate. Hex bolt heads and matching hex nuts are manufactured to DIN standard tolerances for a precise, wobble-free thread engagement that inspires confidence in critical fastened joints. The set includes matching flat washers and spring washers for each size to ensure proper load distribution and vibration resistance. Supplied in a compartmentalized clear plastic case with labeled dividers for instant size identification and organized storage. An invaluable workshop consumable that eliminates trips to the hardware store for common fastener sizes.","price":5.55,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8W","by_name":"Edge2Edge Media","by_url":"https:\/\/unsplash.com\/@edge2edgemedia","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/silver-and-black-metal-tools-qHhJkxare7A","file_name":"fasteners02.avif","title":"Nuts and bolts"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWR","name":"Fasteners","slug":"fasteners"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3FF6W79ERQ60WRKT1W","name":"Screws","description":"Box of 100 general-purpose pan head machine screws in M5x30mm size, manufactured from zinc-plated mild steel for reliable corrosion resistance in indoor and sheltered outdoor applications. The Phillips drive recess is precisely formed to provide a secure, positive engagement with the screwdriver tip, significantly reducing the cam-out that damages both screws and tools. The pan head profile sits above the surface of the material, providing a clean, finished appearance and a bearing surface that distributes clamping force over a wider area than flat-head alternatives. Machine-threaded shanks ensure consistent, repeatable clamping force across all fastened joints and allow for easy removal and reinstallation during maintenance. Compatible with M5 hex nuts, nylon lock nuts, and threaded inserts. Suitable for joining sheet metal, machine assembly, wood-to-metal connections, and general workshop fabrication tasks.","price":6.25,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8V","by_name":"Eliza Diamond","by_url":"https:\/\/unsplash.com\/@eliza28diamonds","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/gray-screw-bolt-lot-pvm5QvjFrJ8","file_name":"fasteners01.avif","title":"Screws"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWR","name":"Fasteners","slug":"fasteners"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH33P80E9W13627MRRWQ","name":"Tape Measure 7.5m","description":"Professional-grade 7.5-meter retractable tape measure built for daily use on construction sites, in workshops, and on renovation projects. The 25mm wide nylon-coated steel blade resists bending, kinking, and snapping at full extension, while the coating protects against abrasion and moisture that would corrode an unprotected blade. An impressive standout of over 3 meters allows solo measurements across door openings, window frames, and room widths without the blade folding. The heavy-duty rubber-armored housing absorbs drops from ladder height onto concrete floors, while the integrated belt clip and wrist lanyard keep the tape always within reach. A smooth, controllable retraction mechanism and positive blade lock hold your measurement securely in place. Dual metric and imperial markings printed in high-contrast colors ensure compatibility with any project specification and easy reading in all lighting conditions.","price":7.23,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8J","by_name":"Brett Jordan","by_url":"https:\/\/unsplash.com\/@brett_jordan","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/blue-and-yellow-measuring-tape-faOPbPmznfQ","file_name":"measure01.avif","title":"Tape Measure 7.5m"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWF","name":"Measures","slug":"measures"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3HXX14K5SQ8CDQEXNG","name":"Cross-head screws","description":"Pack of 50 Phillips cross-head screws in M4x25mm size, manufactured from zinc-plated steel for dependable corrosion protection in indoor and semi-exposed environments. The cross-head drive pattern ensures efficient power transfer from both manual and powered screwdrivers, while the precisely formed recess depth minimizes cam-out and reduces the risk of damaging the screw head or work surface. A sharp, self-starting thread point eliminates the need for pre-drilling in softwood, MDF, and chipboard applications, speeding up assembly time considerably. The 25mm thread length provides strong pull-out resistance in materials 15mm thick and above. Ideal for fastening light-gauge metal brackets, cabinet hinges, electrical outlet boxes, and general hardware. Each screw is individually inspected to ensure consistent head formation and thread quality across the entire pack.","price":7.99,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8X","by_name":"Milad Fallah","by_url":"https:\/\/unsplash.com\/@miladfallah90","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/silver-screw-lot-on-brown-wooden-table-wwZYL4BYFto","file_name":"fasteners03.avif","title":"Cross-head screws"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWR","name":"Fasteners","slug":"fasteners"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2EXDQ749444RB4RAMH","name":"Slip Joint Pliers","description":"Adjustable slip joint pliers that feature a two-position pivot mechanism for switching between regular and wide jaw openings to accommodate different fastener sizes. The PVC-coated handles offer a comfortable, non-slip grip while the precisely machined jaws securely grasp round, flat, and hexagonal objects without slipping. Constructed from durable drop-forged carbon steel that has been heat-treated to withstand heavy daily use in professional environments. The curved jaw section grips pipes and cylindrical objects, while the flat front surface handles nuts, bolts, and sheet materials. A wire cutter integrated near the pivot handles light cutting tasks without reaching for a separate tool. Perfect for plumbing, automotive, HVAC, and general maintenance work where a single versatile gripping tool saves time.","price":9.17,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7P","by_name":"Yasin Hasan","by_url":"https:\/\/unsplash.com\/@yasin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/dwlxTSpfKXg","file_name":"pliers05.avif","title":"Slip joint pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}}],"from":1,"last_page":6,"per_page":9,"to":9,"total":50}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Prices sorted ascending | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 469c5503-be7e-4b2b-ab31-2e9d6cd438bd |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:07 GMT |
| ETag | "ff5ac465a74903195e84cfda35734701" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JH3SNJ90YFW1GJ2NK17B","name":"Workbench with Drawers","description":"Heavy-duty workbench combining a solid hardwood laminate top with an integrated steel frame that supports working loads up to 500kg for the toughest assembly, fabrication, and repair tasks. Four full-extension lockable drawers on ball-bearing slides provide convenient storage for hand tools, fasteners, measuring instruments, and project components within easy arms reach. The 1500x600mm work surface offers generous space for clamping, assembly, soldering, and detailed work, while the hardwood top resists dents, scratches, and chemical spills better than particleboard alternatives. A lower shelf provides additional storage for power tools, parts bins, and heavy equipment. Adjustable leveling feet compensate for uneven workshop floors, ensuring a perfectly stable, wobble-free work platform. The ideal centerpiece for professional workshops, maker spaces, and serious home garages where a reliable work surface is essential.","price":178.2,"is_location_offer":false,"is_rental":false,"co2_rating":"B","in_stock":true,"is_eco_friendly":true,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG94","by_name":"Matteo Minoglio","by_url":"https:\/\/unsplash.com\/@ilmino","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/opened-brown-wooden-drawers-m8-NX7WxbpM","file_name":"workbench02.avif","title":"Workbench with Drawers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWP","name":"Workbench","slug":"workbench"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3TAS0CFVAMWSM8SK75","name":"Wooden Workbench","description":"Traditional solid European beech wood workbench built with time-tested mortise-and-tenon joinery and hardwood dowel pins for exceptional rigidity and a working lifetime measured in decades rather than years. The 1400x500mm work surface is planed smooth, sanded to a fine finish, and treated with penetrating linseed oil to resist moisture, glue, and common workshop stains without building up a slippery film. A built-in tool well running the full length of the back edge keeps chisels, pencils, marking gauges, and small parts from rolling off the work surface during use. The substantial underframe includes a full-width lower shelf for storing planes, saws, and workshop accessories within easy reach. Rated for a 300kg distributed load capacity, this bench handles heavy timber, metalwork clamping, and power tool operations without flexing. The timeless design and natural beauty of solid beech make this workbench both a serious working tool and the proud centerpiece of any craft workshop.","price":172.52,"is_location_offer":false,"is_rental":false,"co2_rating":"B","in_stock":true,"is_eco_friendly":true,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG95","by_name":"Brett Garwood","by_url":"https:\/\/unsplash.com\/@brettgarwood","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/brown-wooden-stick-on-brown-wooden-table-asZVvgMGshc","file_name":"workbench01.avif","title":"Wooden Workbench"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWP","name":"Workbench","slug":"workbench"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH41812YMMA8CPZ0NTTQ","name":"Cordless Drill 20V","description":"Versatile 20V cordless drill and driver featuring a high-capacity 4.0Ah lithium-ion battery that delivers sustained power for a full day of demanding drilling and fastening tasks on a single charge. The heavy-duty 13mm single-sleeve keyless chuck accepts a comprehensive range of drill bits, spade bits, hole saws, and driver accessories without the need for a chuck key. A two-speed all-metal gearbox provides 450 RPM in low gear for maximum torque fastening and 1,800 RPM in high gear for rapid drilling in wood, metal, and masonry materials. Twenty-plus-one torque settings on the adjustable clutch collar allow precise control over fastening depth to prevent cam-out and screw damage in different materials. An integrated LED work light automatically illuminates the drilling area when the trigger is touched, providing visibility in dark cabinets, ceiling cavities, and crawl spaces. Ideal for contractors, remodelers, and serious DIY enthusiasts who need portable, professional-grade power without being tethered to an extension cord.","price":125.23,"is_location_offer":true,"is_rental":false,"co2_rating":"E","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG88","by_name":"Syed Hussaini","by_url":"https:\/\/unsplash.com\/@syhussaini","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/MXeDE_yCdHQ","file_name":"drill01.avif","title":"Cordless Drill"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWK","name":"Drill","slug":"drill"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH43X1MPPTGGGTF4RAZY","name":"Cordless Drill 18V","description":"Compact and lightweight 18V cordless drill offering 50Nm of torque in a well-balanced package that reduces operator fatigue during extended overhead, horizontal, and downward drilling and driving tasks. The 3.0Ah lithium-ion battery provides ample capacity for a busy day of residential drilling and driving, while the fast charger replenishes a depleted battery in under 60 minutes. A 10mm keyless chuck handles the most commonly used drill bits, spade bits, and quarter-inch hex driver inserts for everyday workshop and job site tasks. The ergonomic soft-grip handle and compact head length provide comfortable, controlled operation in tight spaces where larger drills cannot reach. An integrated LED work light illuminates the work surface for improved accuracy when driving screws in dimly lit areas. A great all-around cordless drill for home improvement, furniture assembly, deck building, and light-duty trade work where portability and comfort are priorities.","price":119.24,"is_location_offer":false,"is_rental":false,"co2_rating":"E","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8A","by_name":"Jonathan Cooper","by_url":"https:\/\/unsplash.com\/@theshuttervision","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/7sZwThSntdw","file_name":"drill03.avif","title":"Cordless Drill 18V"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWK","name":"Drill","slug":"drill"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH40T4BFVEECH008EFH6","name":"Random Orbit Sander","description":"Electric random orbit sander combining 14,000 RPM pad rotation with an eccentric 2.5mm orbital action pattern that produces a completely swirl-free finish on wood, lacquer, paint, and primer surfaces. The 125mm hook-and-loop pad accepts standard multi-hole sanding discs from 60 to 400 grit for quick, tool-free abrasive changes between roughing and finishing passes. A responsive 300W motor delivers consistent sanding power at every speed setting, from aggressive stock removal at full speed to delicate final finishing at reduced RPM using the variable speed dial. The random orbital motion means no two particles of abrasive ever follow the same path twice, eliminating the visible scratch patterns that plague standard orbital and belt sanders. The integrated micro-filter dust collection system captures over 90% of airborne particles at the source. Low vibration levels and an ergonomic palm-grip body make this the preferred finishing tool for furniture makers, cabinet shops, and automotive paint preparation.","price":100.79,"is_location_offer":false,"is_rental":false,"co2_rating":"E","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG87","by_name":"Adi Goldstein","by_url":"https:\/\/unsplash.com\/@adigold1","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/aO4c6o4H2MI","file_name":"sander03.avif","title":"Random orbit sander"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWH","name":"Sander","slug":"sander"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3Q1QDFVFWKQJM4CY5G","name":"Drawer Tool Cabinet","description":"Professional rolling tool cabinet featuring five full-extension ball-bearing drawer slides rated for smooth, quiet, jam-free operation even when loaded to their 25kg per-drawer capacity. Constructed entirely from cold-rolled 18-gauge steel with a durable powder-coated finish that resists scratches, workshop chemicals, solvent splashes, and surface rust. Each drawer includes textured anti-slip liners to keep tools organized and prevent them from sliding around during transport between work areas. A central keyed cylinder lock simultaneously secures all five drawers, protecting your valuable tool investment from unauthorized access on shared job sites. The 680x460x1000mm cabinet rolls on four swivel casters with brakes, allowing easy repositioning around any workshop or garage floor. With a combined 200kg load capacity and a solid steel worktop surface, this cabinet serves as both mobile storage and an auxiliary work surface.","price":89.55,"is_location_offer":false,"is_rental":false,"co2_rating":"B","in_stock":true,"is_eco_friendly":true,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG92","by_name":"Tekton","by_url":"https:\/\/unsplash.com\/@tekton_tools","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/black-and-gray-metal-tool-LtphNTXHQAc","file_name":"toolcabinet02.avif","title":"Drawer Tool Cabinet"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWN","name":"Storage Solutions","slug":"storage solutions"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH3RAV9MF0FXZZZDANHX","name":"Tool Cabinet","description":"Versatile wall-mounted or freestanding tool cabinet built from heavy-gauge welded steel with three spacious drawers and an upper compartment for organized, secure tool storage. The textured powder-coated exterior resists workshop chemicals, oil stains, and everyday bumps and scrapes, maintaining a professional appearance through years of hard use. A keyed cylinder lock secures the entire cabinet, keeping expensive hand tools and precision instruments safe from unauthorized access in shared workshops. Adjustable drawer dividers allow you to customize compartment sizes for different tool collections, from small precision instruments to bulky power tool accessories. Pre-drilled mounting holes on the back panel allow quick, secure wall attachment using standard lag screws or wall anchors. A compact 600x400x800mm footprint makes this cabinet ideal for smaller workshops, garage walls, service vans, and mobile repair stations.","price":86.71,"is_location_offer":false,"is_rental":false,"co2_rating":"B","in_stock":true,"is_eco_friendly":true,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG93","by_name":"Georg Eiermann","by_url":"https:\/\/unsplash.com\/@georgeiermann","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/a-group-of-wooden-objects-uXWbowHdJqk","file_name":"toolcabinet01.avif","title":"Tool Cabinet"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWN","name":"Storage Solutions","slug":"storage solutions"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3Z0XQV44BXQ2BCVVWT","name":"Circular Saw","description":"Portable circular saw powered by a robust 1400W motor that drives a 190mm carbide-tipped blade at 5,500 RPM for clean, fast, straight cuts through solid timber, plywood, MDF, and sheet materials up to 67mm thick. The precision-machined aluminum base plate provides a flat, stable reference surface and adjusts smoothly for bevel cuts from 0 to 45 degrees with a positive detent at the most commonly used angles. An integrated dust blower directs a stream of air ahead of the blade to keep the pencil line visible under the constant shower of sawdust generated during cutting. The spindle lock allows quick, safe blade changes with a single wrench, while the electric brake stops the blade within seconds of releasing the trigger for added safety between cuts. An ergonomic soft-grip main handle and auxiliary front handle provide confident two-handed control for both plunge cuts and guided rip cuts. Essential for framing carpenters, renovation contractors, and DIY builders who need a portable, powerful saw for on-site timber work.","price":80.19,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG86","by_name":"Luther.M.E. Bottrill","by_url":"https:\/\/unsplash.com\/@luthermeb","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/EgIT3YHBo9E","file_name":"saw02.avif","title":"Saw"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWJ","name":"Saw","slug":"saw"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3YXWA3JYYWPX119FAY","name":"Belt Sander","description":"Powerful 800W belt sander engineered for aggressive material removal on large flat surfaces including tabletops, doors, hardwood flooring, and timber decking. The 76x533mm sanding belt travels at an impressive 380 meters per minute, enabling rapid stock removal, paint stripping, and surface leveling in a fraction of the time required by orbital sanders. A precision front roller nose allows flush sanding against walls, inside corners, and perpendicular surfaces for complete coverage without leaving unsanded edges. The quick-release belt change mechanism allows swapping abrasive grits in seconds without tools, keeping workflow interruptions to a minimum. A secondary handle on the front provides two-handed control and even pressure distribution across the full width of the belt. The dust extraction bag and auxiliary vacuum port work together to capture the large volume of fine particles generated during aggressive sanding operations.","price":73.59,"is_location_offer":false,"is_rental":false,"co2_rating":"E","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG85","by_name":"Luther.M.E. Bottrill","by_url":"https:\/\/unsplash.com\/@luthermeb","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/7kHN1-9dD_4","file_name":"sander02.avif","title":"Belt sander"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWH","name":"Sander","slug":"sander"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}}],"from":1,"last_page":6,"per_page":9,"to":9,"total":50}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Prices sorted descending | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| User-Agent | PostmanRuntime/7.39.1 |
| Accept | */* |
| Cache-Control | no-cache |
| Postman-Token | dea14a31-52c9-4f61-ac2a-f965857f4709 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:08 GMT |
| ETag | "5dcd3a22f0fc42f0a020ea3026141140" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":5,"data":[{"id":"01M552JH3N299RA449M1GN9TP9","name":"Washers","description":"Assorted pack of 150 zinc-plated steel flat washers in popular metric sizes ranging from M4 to M10, covering the most commonly needed sizes for workshop, garage, and job site fastener work. These washers distribute the clamping force of bolts and nuts over a larger surface area, preventing damage to soft materials like wood, plastic, and painted or powder-coated metal surfaces. The smooth, burr-free finish on both faces ensures a flat, stable seating surface that maximizes friction and prevents fastener loosening under vibration. Each washer is stamped from precision-rolled steel strip to consistent thickness tolerances, ensuring predictable bolt stretch and joint behavior across multiple fastening points. The zinc plating provides reliable corrosion protection for indoor use and sheltered outdoor applications. An indispensable consumable for any workshop, garage, or maintenance department handling regular fastener assembly and repair work.","price":3.55,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG90","by_name":"Robert Ruggiero","by_url":"https:\/\/unsplash.com\/@robert2301","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/a-pile-of-different-colored-washers-sitting-on-top-of-a-table-oY6774he6GQ","file_name":"fasteners06.avif","title":"Washers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWR","name":"Fasteners","slug":"fasteners"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3Q1QDFVFWKQJM4CY5G","name":"Drawer Tool Cabinet","description":"Professional rolling tool cabinet featuring five full-extension ball-bearing drawer slides rated for smooth, quiet, jam-free operation even when loaded to their 25kg per-drawer capacity. Constructed entirely from cold-rolled 18-gauge steel with a durable powder-coated finish that resists scratches, workshop chemicals, solvent splashes, and surface rust. Each drawer includes textured anti-slip liners to keep tools organized and prevent them from sliding around during transport between work areas. A central keyed cylinder lock simultaneously secures all five drawers, protecting your valuable tool investment from unauthorized access on shared job sites. The 680x460x1000mm cabinet rolls on four swivel casters with brakes, allowing easy repositioning around any workshop or garage floor. With a combined 200kg load capacity and a solid steel worktop surface, this cabinet serves as both mobile storage and an auxiliary work surface.","price":89.55,"is_location_offer":false,"is_rental":false,"co2_rating":"B","in_stock":true,"is_eco_friendly":true,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG92","by_name":"Tekton","by_url":"https:\/\/unsplash.com\/@tekton_tools","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/black-and-gray-metal-tool-LtphNTXHQAc","file_name":"toolcabinet02.avif","title":"Drawer Tool Cabinet"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWN","name":"Storage Solutions","slug":"storage solutions"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH3RAV9MF0FXZZZDANHX","name":"Tool Cabinet","description":"Versatile wall-mounted or freestanding tool cabinet built from heavy-gauge welded steel with three spacious drawers and an upper compartment for organized, secure tool storage. The textured powder-coated exterior resists workshop chemicals, oil stains, and everyday bumps and scrapes, maintaining a professional appearance through years of hard use. A keyed cylinder lock secures the entire cabinet, keeping expensive hand tools and precision instruments safe from unauthorized access in shared workshops. Adjustable drawer dividers allow you to customize compartment sizes for different tool collections, from small precision instruments to bulky power tool accessories. Pre-drilled mounting holes on the back panel allow quick, secure wall attachment using standard lag screws or wall anchors. A compact 600x400x800mm footprint makes this cabinet ideal for smaller workshops, garage walls, service vans, and mobile repair stations.","price":86.71,"is_location_offer":false,"is_rental":false,"co2_rating":"B","in_stock":true,"is_eco_friendly":true,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG93","by_name":"Georg Eiermann","by_url":"https:\/\/unsplash.com\/@georgeiermann","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/a-group-of-wooden-objects-uXWbowHdJqk","file_name":"toolcabinet01.avif","title":"Tool Cabinet"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWN","name":"Storage Solutions","slug":"storage solutions"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3SNJ90YFW1GJ2NK17B","name":"Workbench with Drawers","description":"Heavy-duty workbench combining a solid hardwood laminate top with an integrated steel frame that supports working loads up to 500kg for the toughest assembly, fabrication, and repair tasks. Four full-extension lockable drawers on ball-bearing slides provide convenient storage for hand tools, fasteners, measuring instruments, and project components within easy arms reach. The 1500x600mm work surface offers generous space for clamping, assembly, soldering, and detailed work, while the hardwood top resists dents, scratches, and chemical spills better than particleboard alternatives. A lower shelf provides additional storage for power tools, parts bins, and heavy equipment. Adjustable leveling feet compensate for uneven workshop floors, ensuring a perfectly stable, wobble-free work platform. The ideal centerpiece for professional workshops, maker spaces, and serious home garages where a reliable work surface is essential.","price":178.2,"is_location_offer":false,"is_rental":false,"co2_rating":"B","in_stock":true,"is_eco_friendly":true,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG94","by_name":"Matteo Minoglio","by_url":"https:\/\/unsplash.com\/@ilmino","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/opened-brown-wooden-drawers-m8-NX7WxbpM","file_name":"workbench02.avif","title":"Workbench with Drawers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWP","name":"Workbench","slug":"workbench"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3TAS0CFVAMWSM8SK75","name":"Wooden Workbench","description":"Traditional solid European beech wood workbench built with time-tested mortise-and-tenon joinery and hardwood dowel pins for exceptional rigidity and a working lifetime measured in decades rather than years. The 1400x500mm work surface is planed smooth, sanded to a fine finish, and treated with penetrating linseed oil to resist moisture, glue, and common workshop stains without building up a slippery film. A built-in tool well running the full length of the back edge keeps chisels, pencils, marking gauges, and small parts from rolling off the work surface during use. The substantial underframe includes a full-width lower shelf for storing planes, saws, and workshop accessories within easy reach. Rated for a 300kg distributed load capacity, this bench handles heavy timber, metalwork clamping, and power tool operations without flexing. The timeless design and natural beauty of solid beech make this workbench both a serious working tool and the proud centerpiece of any craft workshop.","price":172.52,"is_location_offer":false,"is_rental":false,"co2_rating":"B","in_stock":true,"is_eco_friendly":true,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG95","by_name":"Brett Garwood","by_url":"https:\/\/unsplash.com\/@brettgarwood","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/brown-wooden-stick-on-brown-wooden-table-asZVvgMGshc","file_name":"workbench01.avif","title":"Wooden Workbench"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWP","name":"Workbench","slug":"workbench"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH3VA99KVYYN3P03FJSZ","name":"Leather toolbelt","description":"Professional-grade tool belt handcrafted from full-grain saddle leather that develops a rich, distinctive patina with use while actually growing stronger and more supple over time. Eleven pockets, loops, and holders are specifically sized and positioned for quick access to hammers, tape measures, pliers, screwdrivers, nail sets, pencils, and assorted fasteners without looking down. The adjustable waist strap fits waist sizes from 32 to 44 inches comfortably over heavy work clothing and distributes weight evenly across the hips to minimize lower back strain during long working days. Double-stitched seams with heavy waxed nylon thread and copper-riveted stress points ensure this belt endures years of daily professional use on construction sites, rooftops, and renovation projects. The leather is vegetable-tanned without harsh chemicals, making it both environmentally responsible and pleasantly aromatic. An heirloom-quality working tool that many tradespeople pass down through generations of continued daily service.","price":61.16,"is_location_offer":false,"is_rental":false,"co2_rating":"B","in_stock":true,"is_eco_friendly":true,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG96","by_name":"jesse orrico","by_url":"https:\/\/unsplash.com\/@jessedo81","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/brown-handled-hammer-and-with-tool-belt-L94dWXNKwrY","file_name":"toolbelt01.avif","title":"Leather toolbelt"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWM","name":"Tool Belts","slug":"tool-belts"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3W8Q11ZV6Q6AS3PSN6","name":"Sheet Sander","description":"Electric sheet sander delivering 12,000 orbits per minute for fast, controlled surface finishing on wood, painted surfaces, metal, and composite materials. The 240W motor provides consistent sanding power from rough 60-grit material removal through to ultra-fine 240-grit finishing, all using standard 112x102mm sanding sheets that are widely available and economical. An integrated dust collection port connects directly to a shop vacuum for a virtually dust-free work environment, or the included cloth dust bag captures fine particles when vacuum extraction is not available. The paper clamping system accepts both pre-punched and plain sanding sheets, giving you maximum flexibility in abrasive selection. At just 1.8kg, this sander is light enough for extended one-handed use on vertical surfaces, overhead work, and detailed finishing tasks. Low vibration levels and an ergonomic palm-grip design reduce hand fatigue, making this tool a pleasure to use for beginners and professionals alike.","price":58.48,"is_location_offer":false,"is_rental":false,"co2_rating":"E","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG84","by_name":"subvertivo _lab","by_url":"https:\/\/unsplash.com\/@subvertivo_lab","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/G6yracEEm8A","file_name":"sander01.avif","title":"Sheet sander"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWH","name":"Sander","slug":"sander"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3YXWA3JYYWPX119FAY","name":"Belt Sander","description":"Powerful 800W belt sander engineered for aggressive material removal on large flat surfaces including tabletops, doors, hardwood flooring, and timber decking. The 76x533mm sanding belt travels at an impressive 380 meters per minute, enabling rapid stock removal, paint stripping, and surface leveling in a fraction of the time required by orbital sanders. A precision front roller nose allows flush sanding against walls, inside corners, and perpendicular surfaces for complete coverage without leaving unsanded edges. The quick-release belt change mechanism allows swapping abrasive grits in seconds without tools, keeping workflow interruptions to a minimum. A secondary handle on the front provides two-handed control and even pressure distribution across the full width of the belt. The dust extraction bag and auxiliary vacuum port work together to capture the large volume of fine particles generated during aggressive sanding operations.","price":73.59,"is_location_offer":false,"is_rental":false,"co2_rating":"E","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG85","by_name":"Luther.M.E. Bottrill","by_url":"https:\/\/unsplash.com\/@luthermeb","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/7kHN1-9dD_4","file_name":"sander02.avif","title":"Belt sander"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWH","name":"Sander","slug":"sander"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH3Z0XQV44BXQ2BCVVWT","name":"Circular Saw","description":"Portable circular saw powered by a robust 1400W motor that drives a 190mm carbide-tipped blade at 5,500 RPM for clean, fast, straight cuts through solid timber, plywood, MDF, and sheet materials up to 67mm thick. The precision-machined aluminum base plate provides a flat, stable reference surface and adjusts smoothly for bevel cuts from 0 to 45 degrees with a positive detent at the most commonly used angles. An integrated dust blower directs a stream of air ahead of the blade to keep the pencil line visible under the constant shower of sawdust generated during cutting. The spindle lock allows quick, safe blade changes with a single wrench, while the electric brake stops the blade within seconds of releasing the trigger for added safety between cuts. An ergonomic soft-grip main handle and auxiliary front handle provide confident two-handed control for both plunge cuts and guided rip cuts. Essential for framing carpenters, renovation contractors, and DIY builders who need a portable, powerful saw for on-site timber work.","price":80.19,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG86","by_name":"Luther.M.E. Bottrill","by_url":"https:\/\/unsplash.com\/@luthermeb","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/EgIT3YHBo9E","file_name":"saw02.avif","title":"Saw"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWJ","name":"Saw","slug":"saw"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}],"from":37,"last_page":6,"per_page":9,"to":45,"total":50}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 6 | 0 | 0 |
| Number of ids = total | 6 | 0 | 0 |
| No duplicates | 6 | 0 | 0 |
| Total | 18 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 4e78e036-2883-457f-a596-8ea9975bce80 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:09 GMT |
| ETag | "7f85c66bfb9ba7a903b9efb83477f3f7" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2AG9122BMKVRF3XH0Z","name":"Pliers","description":"Reliable general-purpose pliers crafted from drop-forged carbon steel for long-lasting durability in demanding working conditions. The serrated jaws provide a firm grip on a variety of materials including wire, nails, small fasteners, and irregularly shaped objects. Comfortable rubber-coated handles absorb vibration and reduce hand fatigue during extended use, while the non-slip surface ensures confident handling. The precision pivot joint maintains alignment under load, delivering smooth, controlled jaw action with every squeeze. Heat-treated steel construction resists wear and deformation even under heavy use. A must-have foundational tool for any workshop, equally suited for professional tradespeople and home repair projects.","price":12.01,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7K","by_name":"Everyday basics","by_url":"https:\/\/unsplash.com\/@zanardi","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/I8eTuMmxIfo","file_name":"pliers02.avif","title":"Pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2BGG1K6K9GEJTT8GEQ","name":"Bolt Cutters","description":"Heavy-duty bolt cutters engineered to slice through hardened bolts, chains, padlocks, and wire fencing with minimal effort. The compound leverage mechanism multiplies your cutting force by a factor of 30, enabling clean cuts through materials up to 10mm in diameter. Hardened alloy steel blades are precisely ground and heat-treated to maintain a sharp edge through years of repeated use on tough materials. Ergonomic rubber grips and the generous 750mm handle length provide excellent control, leverage, and reach during overhead or awkward-angle cuts. An adjustable blade tension screw lets you fine-tune the jaw alignment for optimal cutting performance. Built for demolition crews, locksmiths, fencing contractors, and maintenance professionals who need reliable cutting power day after day.","price":48.41,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7M","by_name":"Michael Dziedzic","by_url":"https:\/\/unsplash.com\/@lazycreekimages","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/pM9pkc9J918","file_name":"pliers03.avif","title":"Bolt cutters"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2DQD17DR3ERTSE1Z2M","name":"Long Nose Pliers","description":"Precision long nose pliers with narrow tapered jaws designed for reaching into tight, confined spaces and bending fine wire with accuracy. Made from chrome vanadium steel with induction-hardened cutting edges that cleanly sever copper, brass, and steel wire without crushing or fraying. The slim jaw profile tapers to a fine point, making these pliers indispensable for electrical terminal work, jewelry making, and intricate mechanical repairs. Bi-component comfort grips minimize hand strain during detailed tasks requiring a steady hand and controlled pressure. The leaf-spring joint returns the handles to the open position automatically, speeding up repetitive tasks. A must-have precision tool trusted by electricians, electronics technicians, and hobbyists worldwide.","price":14.24,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7N","by_name":"Brett Jordan","by_url":"https:\/\/unsplash.com\/@brett_jordan","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/GamuDTVm02g","file_name":"pliers04.avif","title":"Long nose pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2EXDQ749444RB4RAMH","name":"Slip Joint Pliers","description":"Adjustable slip joint pliers that feature a two-position pivot mechanism for switching between regular and wide jaw openings to accommodate different fastener sizes. The PVC-coated handles offer a comfortable, non-slip grip while the precisely machined jaws securely grasp round, flat, and hexagonal objects without slipping. Constructed from durable drop-forged carbon steel that has been heat-treated to withstand heavy daily use in professional environments. The curved jaw section grips pipes and cylindrical objects, while the flat front surface handles nuts, bolts, and sheet materials. A wire cutter integrated near the pivot handles light cutting tasks without reaching for a separate tool. Perfect for plumbing, automotive, HVAC, and general maintenance work where a single versatile gripping tool saves time.","price":9.17,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7P","by_name":"Yasin Hasan","by_url":"https:\/\/unsplash.com\/@yasin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/dwlxTSpfKXg","file_name":"pliers05.avif","title":"Slip joint pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}}],"from":1,"last_page":1,"per_page":9,"to":5,"total":5}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| All from the requested category | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | e7980234-b072-4400-b232-b71ff82ae00e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:09 GMT |
| ETag | "bb3449f79426cbae6a4f225627998461" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2AG9122BMKVRF3XH0Z","name":"Pliers","description":"Reliable general-purpose pliers crafted from drop-forged carbon steel for long-lasting durability in demanding working conditions. The serrated jaws provide a firm grip on a variety of materials including wire, nails, small fasteners, and irregularly shaped objects. Comfortable rubber-coated handles absorb vibration and reduce hand fatigue during extended use, while the non-slip surface ensures confident handling. The precision pivot joint maintains alignment under load, delivering smooth, controlled jaw action with every squeeze. Heat-treated steel construction resists wear and deformation even under heavy use. A must-have foundational tool for any workshop, equally suited for professional tradespeople and home repair projects.","price":12.01,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7K","by_name":"Everyday basics","by_url":"https:\/\/unsplash.com\/@zanardi","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/I8eTuMmxIfo","file_name":"pliers02.avif","title":"Pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2F4ZF8Y8F7T1EBMA3H","name":"Claw Hammer with Shock Reduction Grip","description":"Ergonomic claw hammer featuring an advanced shock reduction grip system that absorbs up to 70% of impact vibrations, protecting your wrist, elbow, and shoulder during prolonged nailing sessions. The 450g carbon steel head is precision-balanced and heat-treated for maximum hardness, ensuring accurate nail driving with minimal effort on every swing. The curved claw design effortlessly removes nails without damaging surrounding wood surfaces, making it equally useful for construction and renovation work. A fiberglass-reinforced handle combines lightweight strength with exceptional durability that far outlasts traditional wooden handles. The overmolded soft-grip zone conforms to your hand shape for a custom-feeling, fatigue-free hold throughout long working days. Recommended for professional framing, carpentry, and renovation projects where operator comfort matters as much as striking performance.","price":13.41,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7Q","by_name":"iMattSmart","by_url":"https:\/\/unsplash.com\/@imattsmart","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/jaLaLQdkBOE","file_name":"hammer01.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2GD6Q6AVJJSHVS7GKD","name":"Hammer","description":"A dependable standard claw hammer suitable for driving and removing nails in everyday construction, carpentry, and home improvement projects. The 350g carbon steel head is drop-forged and heat-treated for maximum hardness, then fitted to a traditional wooden handle that provides natural shock absorption with each strike. Well-balanced weight distribution between the head and handle ensures accurate strikes with minimal wrist effort, reducing fatigue during repetitive nailing tasks. The polished face resists rust and provides a smooth surface that drives nails cleanly without leaving marks on finish materials. A gently curved claw provides reliable nail extraction leverage without excessive force. This versatile hammer belongs in every toolbox, from professional carpentry workshops to home garages and apartment maintenance kits.","price":12.58,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7R","by_name":"Jozsef Hocza","by_url":"https:\/\/unsplash.com\/@hocza","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/D3nouOYbALc","file_name":"hammer02.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2K9QV3KQSQ6ZBBD61D","name":"Thor Hammer","description":"The legendary Thor Hammer combines premium craftsmanship with raw striking power in a tool that is truly built to last generations. Forged from Uru metal with a hand-wrapped leather grip, this extraordinary 5kg masterpiece delivers unmatched impact force for the most demanding demolition, forging, and heavy construction tasks. The perfectly balanced oversized head ensures every swing transfers maximum energy to the target, while the enlarged striking face covers more surface area than any conventional hammer. Despite its impressive mass, the ergonomic handle design and precise weight distribution allow for surprisingly controlled, accurate swings. This is not merely a tool but a statement piece for those who accept nothing less than the absolute best in their workshop. Comes with a lifetime warranty because true legends never fade. Please note: only one Thor Hammer is permitted per customer.","price":11.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7T","by_name":"ANIRUDH","by_url":"https:\/\/unsplash.com\/@lanirudhreddy","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/3esjG-nlgyk","file_name":"hammer04.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2MMVA7GAB33HSXMKWQ","name":"Sledgehammer","description":"Powerful sledgehammer designed for heavy demolition, driving stakes, breaking concrete, and splitting masonry with devastating efficiency. The 3.6kg forged steel head delivers tremendous impact force concentrated through a hardened striking face that resists chipping and mushrooming. A 900mm fiberglass handle provides excellent shock absorption, superior reach, and the flexibility needed to generate maximum swing velocity. Anti-vibration technology embedded in the handle dampens recoil forces, significantly reducing operator fatigue during extended demolition sessions. The overmolded grip zone prevents the handle from twisting or slipping out of sweaty or gloved hands during overhead swings. Built for construction workers, landscapers, and demolition crews who demand professional-grade striking tools that perform reliably under the most punishing conditions.","price":17.75,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7V","by_name":"Fausto Marqués","by_url":"https:\/\/unsplash.com\/@faustomarques","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/A9dq-L3zzHA","file_name":"hammer05.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2PMYE5DXP9X6JJ29E0","name":"Claw Hammer with Fiberglass Handle","description":"Modern claw hammer featuring a durable fiberglass handle that outlasts wood, absorbs vibration more effectively, and shrugs off moisture without swelling, cracking, or loosening over time. The 400g carbon steel head is drop-forged and heat-treated to optimal hardness for reliable nail driving in softwood, hardwood, and engineered lumber. The fiberglass core is permanently bonded to the head and encased in a comfortable overmold grip that prevents slipping even when wet or oily. A magnetic nail starter near the head allows one-handed nail placement, freeing your other hand to hold materials in position. The curved claw provides smooth, controlled nail extraction with excellent leverage. Ideal for contractors and DIY builders who want a weather-resistant, maintenance-free hammer that performs reliably on every job site and in any season.","price":20.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7W","by_name":"Jonny Gios","by_url":"https:\/\/unsplash.com\/@supergios","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/ARaYGFeuwpU","file_name":"hammer06.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2QEYQXSH3VVTVKM55B","name":"Court Hammer","description":"Compact precision court hammer with a 300g carbon steel head designed for light-duty nailing, tapping dowels, and delicate assembly tasks where a full-size hammer would be too heavy and unwieldy. The short 280mm wooden handle provides excellent close-quarters control for detailed work in confined spaces such as cabinets, closets, and furniture interiors. The polished flat face drives small nails and brads without bending them, while the cross-peen on the opposite side is useful for starting small fasteners between your fingers. Perfectly weighted to provide enough force for trim carpentry and light framing without damaging delicate surfaces. The lacquered wooden handle resists moisture absorption and provides a warm, comfortable grip. A handy addition to any toolkit when precision and finesse matter more than raw striking power.","price":18.63,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7X","by_name":"Wesley Tingey","by_url":"https:\/\/unsplash.com\/@wesleyphotography","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/9z9fxr_7Z-k","file_name":"hammer07.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2RM0ZQBYHPETRGG6TY","name":"Wood Saw","description":"Traditional hand saw crafted with a high carbon steel blade featuring 7 teeth per inch for efficient crosscutting and ripping of timber, plywood, and composite boards. The 500mm blade length handles standard dimensional lumber, sheet goods, and tree branches with smooth, clean cuts that require minimal sanding afterward. Each tooth is precision-set and hardened to stay sharp through hundreds of cuts in both softwood and hardwood species. A comfortable contoured wooden handle provides a secure three-finger grip and natural wrist alignment that reduces fatigue during extended cutting sessions. The taper-ground blade is thinner at the back than at the teeth, reducing friction and binding during deep cuts. Essential for carpenters, woodworkers, and gardeners who appreciate the precision, quiet operation, and portability of a quality hand saw.","price":12.18,"is_location_offer":false,"is_rental":false,"co2_rating":"B","in_stock":true,"is_eco_friendly":true,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7Y","by_name":"Jonathan Cooper","by_url":"https:\/\/unsplash.com\/@theshuttervision","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/fTpzd-PjyDQ","file_name":"saw01.avif","title":"Wood Saw"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWA","name":"Hand Saw","slug":"hand-saw"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}],"from":1,"last_page":5,"per_page":9,"to":9,"total":40}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| All from the requested brand | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 03e21596-2796-45fd-842f-2370686d0778 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:09 GMT |
| ETag | "5ce95e4fad8a78ec52ced56d7e2f6632" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JH3486D3XWBPVZ4CN9P2","name":"Measuring Tape","description":"Standard 5-meter measuring tape with a durable 19mm steel blade and reliable automatic retraction mechanism for quick, hassle-free measurements in the workshop, on the job site, or around the home. The precision-riveted end hook features controlled play that automatically compensates for accurate inside and outside measurements, eliminating a common source of measuring error. A thumb-operated blade lock clicks firmly into place to hold your measurement while you mark, transfer dimensions, or record numbers. Clear metric graduations are printed in fade-resistant ink that remains legible even after years of heavy use and repeated blade extension cycles. The compact, lightweight ABS housing fits comfortably in a trouser pocket, tool belt pouch, or apron for all-day portability without adding noticeable weight. An affordable, dependable measuring tool that every tradesperson, crafter, and homeowner should have within arms reach.","price":10.07,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8K","by_name":"Diana Polekhina","by_url":"https:\/\/unsplash.com\/@diana_pole","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/silver-and-black-necklace-on-yellow-textile-iUfusOthmgQ","file_name":"measure02.avif","title":"Measuring Tape"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWF","name":"Measures","slug":"measures"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2K9QV3KQSQ6ZBBD61D","name":"Thor Hammer","description":"The legendary Thor Hammer combines premium craftsmanship with raw striking power in a tool that is truly built to last generations. Forged from Uru metal with a hand-wrapped leather grip, this extraordinary 5kg masterpiece delivers unmatched impact force for the most demanding demolition, forging, and heavy construction tasks. The perfectly balanced oversized head ensures every swing transfers maximum energy to the target, while the enlarged striking face covers more surface area than any conventional hammer. Despite its impressive mass, the ergonomic handle design and precise weight distribution allow for surprisingly controlled, accurate swings. This is not merely a tool but a statement piece for those who accept nothing less than the absolute best in their workshop. Comes with a lifetime warranty because true legends never fade. Please note: only one Thor Hammer is permitted per customer.","price":11.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7T","by_name":"ANIRUDH","by_url":"https:\/\/unsplash.com\/@lanirudhreddy","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/3esjG-nlgyk","file_name":"hammer04.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2JAZV07V79R70NNDNX","name":"Claw Hammer","description":"Traditional claw hammer with a polished carbon steel head engineered for driving and removing nails with precision and confidence. The rubber-wrapped handle provides a secure, comfortable grip even in wet, dusty, or cold conditions where bare metal or wood handles would slip. At 500g, it offers the ideal balance between striking power and maneuverability for general carpentry, framing, and construction tasks. The curved claw design allows for smooth nail extraction without gouging or marring wood surfaces, protecting your finished work. The head-to-handle connection uses an epoxy-bonded wedge system that prevents loosening over time. A reliable, no-nonsense tool that professional carpenters and weekend builders alike reach for every day.","price":11.48,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7S","by_name":"Andrew George","by_url":"https:\/\/unsplash.com\/@andrewjoegeorge","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/YU2mCvXR0wA","file_name":"hammer03.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2AG9122BMKVRF3XH0Z","name":"Pliers","description":"Reliable general-purpose pliers crafted from drop-forged carbon steel for long-lasting durability in demanding working conditions. The serrated jaws provide a firm grip on a variety of materials including wire, nails, small fasteners, and irregularly shaped objects. Comfortable rubber-coated handles absorb vibration and reduce hand fatigue during extended use, while the non-slip surface ensures confident handling. The precision pivot joint maintains alignment under load, delivering smooth, controlled jaw action with every squeeze. Heat-treated steel construction resists wear and deformation even under heavy use. A must-have foundational tool for any workshop, equally suited for professional tradespeople and home repair projects.","price":12.01,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7K","by_name":"Everyday basics","by_url":"https:\/\/unsplash.com\/@zanardi","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/I8eTuMmxIfo","file_name":"pliers02.avif","title":"Pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2RM0ZQBYHPETRGG6TY","name":"Wood Saw","description":"Traditional hand saw crafted with a high carbon steel blade featuring 7 teeth per inch for efficient crosscutting and ripping of timber, plywood, and composite boards. The 500mm blade length handles standard dimensional lumber, sheet goods, and tree branches with smooth, clean cuts that require minimal sanding afterward. Each tooth is precision-set and hardened to stay sharp through hundreds of cuts in both softwood and hardwood species. A comfortable contoured wooden handle provides a secure three-finger grip and natural wrist alignment that reduces fatigue during extended cutting sessions. The taper-ground blade is thinner at the back than at the teeth, reducing friction and binding during deep cuts. Essential for carpenters, woodworkers, and gardeners who appreciate the precision, quiet operation, and portability of a quality hand saw.","price":12.18,"is_location_offer":false,"is_rental":false,"co2_rating":"B","in_stock":true,"is_eco_friendly":true,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7Y","by_name":"Jonathan Cooper","by_url":"https:\/\/unsplash.com\/@theshuttervision","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/fTpzd-PjyDQ","file_name":"saw01.avif","title":"Wood Saw"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWA","name":"Hand Saw","slug":"hand-saw"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2GD6Q6AVJJSHVS7GKD","name":"Hammer","description":"A dependable standard claw hammer suitable for driving and removing nails in everyday construction, carpentry, and home improvement projects. The 350g carbon steel head is drop-forged and heat-treated for maximum hardness, then fitted to a traditional wooden handle that provides natural shock absorption with each strike. Well-balanced weight distribution between the head and handle ensures accurate strikes with minimal wrist effort, reducing fatigue during repetitive nailing tasks. The polished face resists rust and provides a smooth surface that drives nails cleanly without leaving marks on finish materials. A gently curved claw provides reliable nail extraction leverage without excessive force. This versatile hammer belongs in every toolbox, from professional carpentry workshops to home garages and apartment maintenance kits.","price":12.58,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7R","by_name":"Jozsef Hocza","by_url":"https:\/\/unsplash.com\/@hocza","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/D3nouOYbALc","file_name":"hammer02.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH35ZAWX5SGV4RRS85TZ","name":"Tape Measure 5m","description":"Compact 5-meter tape measure designed for everyday measuring tasks around the home, workshop, and light commercial projects. The 19mm steel blade features clear metric graduations engraved and printed for readability that endures even after extensive use and repeated blade cycling. A smooth retraction spring mechanism and reliable thumb-operated blade lock ensure consistent, hassle-free operation day after day without jamming or premature blade wear. The slim, lightweight ABS housing slips easily into a pocket or clips to a belt loop, making this tape measure truly portable for all-day carry. The end hook is triple-riveted for durability and features controlled play for accurate inside and outside measurements. A great everyday carry measuring tool for interior designers, real estate professionals, DIY enthusiasts, and anyone who regularly needs quick, accurate measurements.","price":12.91,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8M","by_name":"Immo Wegmann","by_url":"https:\/\/unsplash.com\/@macroman","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/yellow-and-black-measuring-tape-1abCQ_3g_UY","file_name":"measure03.avif","title":"Tape Measure 5m"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWF","name":"Measures","slug":"measures"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2Z4X11XZTBJ4YR037G","name":"Chisels Set","description":"Set of five professional wood chisels with chrome vanadium steel blades ground to a razor-sharp 25-degree bevel for clean, precise cuts in both hardwood and softwood species. Traditional European-style wooden handles are turned from dense beech and designed to withstand repeated mallet strikes without splitting or mushrooming at the striking end. Blade widths of 6mm, 10mm, 13mm, 19mm, and 25mm cover the full range of common woodworking tasks including mortising, paring, hinge recessing, and joint fitting. Each blade is individually honed at the factory and protected by a clear lacquer coating that should be removed before first use. Supplied in a fitted wooden storage box with individual blade slots to prevent edge contact and maintain sharpness between uses. A solid foundation set for apprentice and experienced woodworkers who value edge retention, balance, and traditional craftsmanship.","price":12.96,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8F","by_name":"Collab Media","by_url":"https:\/\/unsplash.com\/@collab_media","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/a-couple-of-tools-that-are-on-a-table-JQZyN8WJPh0","file_name":"chisels01.avif","title":"Chisel"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWE","name":"Chisels","slug":"chisels"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2F4ZF8Y8F7T1EBMA3H","name":"Claw Hammer with Shock Reduction Grip","description":"Ergonomic claw hammer featuring an advanced shock reduction grip system that absorbs up to 70% of impact vibrations, protecting your wrist, elbow, and shoulder during prolonged nailing sessions. The 450g carbon steel head is precision-balanced and heat-treated for maximum hardness, ensuring accurate nail driving with minimal effort on every swing. The curved claw design effortlessly removes nails without damaging surrounding wood surfaces, making it equally useful for construction and renovation work. A fiberglass-reinforced handle combines lightweight strength with exceptional durability that far outlasts traditional wooden handles. The overmolded soft-grip zone conforms to your hand shape for a custom-feeling, fatigue-free hold throughout long working days. Recommended for professional framing, carpentry, and renovation projects where operator comfort matters as much as striking performance.","price":13.41,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7Q","by_name":"iMattSmart","by_url":"https:\/\/unsplash.com\/@imattsmart","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/jaLaLQdkBOE","file_name":"hammer01.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}],"from":1,"last_page":3,"per_page":9,"to":9,"total":22}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Prices between 10 and 30 | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 8f88ac62-5579-4601-a04c-8bfd5679cdc1 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:10 GMT |
| ETag | "b249a8037b28d664b157cd4593e9d24e" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"id":"01M552JH0THC23EZ570GKVAFFH","name":"Hand Tools","slug":"hand-tools","parent_id":null,"sub_categories":[{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer","parent_id":"01M552JH0THC23EZ570GKVAFFH","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWA","name":"Hand Saw","slug":"hand-saw","parent_id":"01M552JH0THC23EZ570GKVAFFH","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWB","name":"Wrench","slug":"wrench","parent_id":"01M552JH0THC23EZ570GKVAFFH","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWC","name":"Screwdriver","slug":"screwdriver","parent_id":"01M552JH0THC23EZ570GKVAFFH","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers","parent_id":"01M552JH0THC23EZ570GKVAFFH","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWE","name":"Chisels","slug":"chisels","parent_id":"01M552JH0THC23EZ570GKVAFFH","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWF","name":"Measures","slug":"measures","parent_id":"01M552JH0THC23EZ570GKVAFFH","sub_categories":[]}]},{"id":"01M552JH0THC23EZ570GKVAFFJ","name":"Power Tools","slug":"power-tools","parent_id":null,"sub_categories":[{"id":"01M552JH0YW2D66AXDEDJGQGWG","name":"Grinder","slug":"grinder","parent_id":"01M552JH0THC23EZ570GKVAFFJ","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWH","name":"Sander","slug":"sander","parent_id":"01M552JH0THC23EZ570GKVAFFJ","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWJ","name":"Saw","slug":"saw","parent_id":"01M552JH0THC23EZ570GKVAFFJ","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWK","name":"Drill","slug":"drill","parent_id":"01M552JH0THC23EZ570GKVAFFJ","sub_categories":[]}]},{"id":"01M552JH0THC23EZ570GKVAFFK","name":"Other","slug":"other","parent_id":null,"sub_categories":[{"id":"01M552JH0YW2D66AXDEDJGQGWM","name":"Tool Belts","slug":"tool-belts","parent_id":"01M552JH0THC23EZ570GKVAFFK","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWN","name":"Storage Solutions","slug":"storage solutions","parent_id":"01M552JH0THC23EZ570GKVAFFK","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWP","name":"Workbench","slug":"workbench","parent_id":"01M552JH0THC23EZ570GKVAFFK","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWQ","name":"Safety Gear","slug":"safety-gear","parent_id":"01M552JH0THC23EZ570GKVAFFK","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWR","name":"Fasteners","slug":"fasteners","parent_id":"01M552JH0THC23EZ570GKVAFFK","sub_categories":[]}]}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| parent_id correct across the tree | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 57f88798-33e8-4bbb-90d7-ce40bd86f9b7 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:10 GMT |
| ETag | "412b0d74773b7b2663c2f46cfd91f88b" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01M552JH0THC23EZ570GKVAFFH","name":"Hand Tools","slug":"hand-tools","parent_id":null,"sub_categories":[{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer","parent_id":"01M552JH0THC23EZ570GKVAFFH","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWA","name":"Hand Saw","slug":"hand-saw","parent_id":"01M552JH0THC23EZ570GKVAFFH","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWB","name":"Wrench","slug":"wrench","parent_id":"01M552JH0THC23EZ570GKVAFFH","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWC","name":"Screwdriver","slug":"screwdriver","parent_id":"01M552JH0THC23EZ570GKVAFFH","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers","parent_id":"01M552JH0THC23EZ570GKVAFFH","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWE","name":"Chisels","slug":"chisels","parent_id":"01M552JH0THC23EZ570GKVAFFH","sub_categories":[]},{"id":"01M552JH0YW2D66AXDEDJGQGWF","name":"Measures","slug":"measures","parent_id":"01M552JH0THC23EZ570GKVAFFH","sub_categories":[]}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Root has the requested id | 1 | 0 | 0 |
| Children match the full tree | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 265a99a7-291c-4c6d-959c-acc32e9680ec |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:10 GMT |
| ETag | "dd1d8a74077c3d0a98768d2b8f2d156a" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools","slug":"forgeflex-tools"},{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware","slug":"mightycraft-hardware"}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Non-empty list | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 11e2a658-baef-4ff4-a414-aeca370e5d57 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:11 GMT |
| ETag | "8fb89c0abeb8de4b993bb6c7dd4cc75f" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools","slug":"forgeflex-tools"}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Each brand contains the term | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | ce99dc0a-2776-4ac2-be02-c6ae702257a6 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:11 GMT |
| ETag | "7ecd47579e0554a0f87724d00012bb7f" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"id":"01M552JH2AG9122BMKVRF3XH0Z","name":"Pliers","description":"Reliable general-purpose pliers crafted from drop-forged carbon steel for long-lasting durability in demanding working conditions. The serrated jaws provide a firm grip on a variety of materials including wire, nails, small fasteners, and irregularly shaped objects. Comfortable rubber-coated handles absorb vibration and reduce hand fatigue during extended use, while the non-slip surface ensures confident handling. The precision pivot joint maintains alignment under load, delivering smooth, controlled jaw action with every squeeze. Heat-treated steel construction resists wear and deformation even under heavy use. A must-have foundational tool for any workshop, equally suited for professional tradespeople and home repair projects.","price":12.01,"is_location_offer":false,"is_rental":false,"in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7K","by_name":"Everyday basics","by_url":"https:\/\/unsplash.com\/@zanardi","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/I8eTuMmxIfo","file_name":"pliers02.avif","title":"Pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2BGG1K6K9GEJTT8GEQ","name":"Bolt Cutters","description":"Heavy-duty bolt cutters engineered to slice through hardened bolts, chains, padlocks, and wire fencing with minimal effort. The compound leverage mechanism multiplies your cutting force by a factor of 30, enabling clean cuts through materials up to 10mm in diameter. Hardened alloy steel blades are precisely ground and heat-treated to maintain a sharp edge through years of repeated use on tough materials. Ergonomic rubber grips and the generous 750mm handle length provide excellent control, leverage, and reach during overhead or awkward-angle cuts. An adjustable blade tension screw lets you fine-tune the jaw alignment for optimal cutting performance. Built for demolition crews, locksmiths, fencing contractors, and maintenance professionals who need reliable cutting power day after day.","price":48.41,"is_location_offer":true,"is_rental":false,"in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7M","by_name":"Michael Dziedzic","by_url":"https:\/\/unsplash.com\/@lazycreekimages","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/pM9pkc9J918","file_name":"pliers03.avif","title":"Bolt cutters"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2DQD17DR3ERTSE1Z2M","name":"Long Nose Pliers","description":"Precision long nose pliers with narrow tapered jaws designed for reaching into tight, confined spaces and bending fine wire with accuracy. Made from chrome vanadium steel with induction-hardened cutting edges that cleanly sever copper, brass, and steel wire without crushing or fraying. The slim jaw profile tapers to a fine point, making these pliers indispensable for electrical terminal work, jewelry making, and intricate mechanical repairs. Bi-component comfort grips minimize hand strain during detailed tasks requiring a steady hand and controlled pressure. The leaf-spring joint returns the handles to the open position automatically, speeding up repetitive tasks. A must-have precision tool trusted by electricians, electronics technicians, and hobbyists worldwide.","price":14.24,"is_location_offer":false,"is_rental":false,"in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7N","by_name":"Brett Jordan","by_url":"https:\/\/unsplash.com\/@brett_jordan","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/GamuDTVm02g","file_name":"pliers04.avif","title":"Long nose pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2EXDQ749444RB4RAMH","name":"Slip Joint Pliers","description":"Adjustable slip joint pliers that feature a two-position pivot mechanism for switching between regular and wide jaw openings to accommodate different fastener sizes. The PVC-coated handles offer a comfortable, non-slip grip while the precisely machined jaws securely grasp round, flat, and hexagonal objects without slipping. Constructed from durable drop-forged carbon steel that has been heat-treated to withstand heavy daily use in professional environments. The curved jaw section grips pipes and cylindrical objects, while the flat front surface handles nuts, bolts, and sheet materials. A wire cutter integrated near the pivot handles light cutting tasks without reaching for a separate tool. Perfect for plumbing, automotive, HVAC, and general maintenance work where a single versatile gripping tool saves time.","price":9.17,"is_location_offer":false,"is_rental":false,"in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7P","by_name":"Yasin Hasan","by_url":"https:\/\/unsplash.com\/@yasin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/dwlxTSpfKXg","file_name":"pliers05.avif","title":"Slip joint pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Current product not listed | 1 | 0 | 0 |
| Same category | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 4d16931d-29ae-41f2-9d66-76f060a28fda |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:11 GMT |
| ETag | "d8260ef53088c2a90622c454ffb088fb" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"id":"01M552JH6P79413ZXA0S6SD6KS","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Handle Material","spec_value":"Bi-component","spec_unit":null},{"id":"01M552JH6P79413ZXA0S6SD6KQ","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Length","spec_value":"200","spec_unit":"mm"},{"id":"01M552JH6P79413ZXA0S6SD6KR","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Material","spec_value":"Chrome Vanadium Steel","spec_unit":null},{"id":"01M552JH6P79413ZXA0S6SD6KT","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Warranty","spec_value":"2","spec_unit":"years"},{"id":"01M552JH6P79413ZXA0S6SD6KP","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Weight","spec_value":"340","spec_unit":"g"}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Each has spec_name and spec_value | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 5e6b1f42-d1dd-4c49-878e-bdac7b81b198 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:12 GMT |
| ETag | "e6822263b34dfad5fefd77d9619c7ac8" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"name":"Adjustable","values":["Yes"],"unit":null},{"name":"Anti-fog","values":["Yes"],"unit":null},{"name":"Battery","values":["2.0","3.0","4.0","5.0"],"unit":"Ah"},{"name":"Belt Size","values":["76x533"],"unit":"mm"},{"name":"Belt Speed","values":["380"],"unit":"m\/min"},{"name":"Blade Diameter","values":["190"],"unit":"mm"},{"name":"Blade Length","values":["500"],"unit":"mm"},{"name":"Blade Width","values":["19","25"],"unit":"mm"},{"name":"Chuck Size","values":["10","13"],"unit":"mm"},{"name":"Cut Resistance","values":["Level 3"],"unit":null},{"name":"Dimensions","values":["1400x500x850","1500x600x850","600x400x800","680x460x1000"],"unit":"mm"},{"name":"Drawers","values":["3","4","5"],"unit":"pcs"},{"name":"Handle Material","values":["Ash Wood","Bi-component","Fiberglass","Hornbeam","Leather Wrapped","Plastic","PVC","Rubber","Wood"],"unit":null},{"name":"Head Type","values":["Flat Head","Pan Head","Phillips"],"unit":null},{"name":"Head Weight","values":["300","350","3600","400","450","4500"],"unit":"g"},{"name":"Length","values":["150","170","180","200","240","250","280","300","320","330","340","450","5","7.5","750","900"],"unit":"mm"},{"name":"Load Capacity","values":["150","200","300","500"],"unit":"kg"},{"name":"Material","values":["ABS Plastic","Beech Wood","Carbon Steel","Chrome Vanadium Steel","Cold Rolled Steel","Forged Steel","Full Grain Leather","Hardened Steel","Hardwood \/ Steel","HDPE","High Carbon Steel","Leather","Nitrile","Nylon Coated Steel","Polycarbonate","Stainless Steel","Steel","Swiss Steel","Uru Metal","Yellow Zinc Steel","Zinc Plated Steel"],"unit":null},{"name":"Max Cut Depth","values":["67"],"unit":"mm"},{"name":"Max Cutting Capacity","values":["10"],"unit":"mm"},{"name":"Max Jaw Opening","values":["30"],"unit":"mm"},{"name":"Max Torque","values":["30","50","60","80"],"unit":"Nm"},{"name":"No Load Speed","values":["5500"],"unit":"rpm"},{"name":"Noise Reduction","values":["28"],"unit":"dB"},{"name":"Pad Diameter","values":["125"],"unit":"mm"},{"name":"Pad Size","values":["112x102"],"unit":"mm"},{"name":"Pieces","values":["100","12","150","200","4","5","50","6","75"],"unit":"pcs"},{"name":"Pockets","values":["11"],"unit":"pcs"},{"name":"Power","values":["1400","240","300","800"],"unit":"W"},{"name":"Shield Material","values":["Polycarbonate"],"unit":null},{"name":"Size","values":["4x40","L","M","M4","M4x25","M5x30"],"unit":null},{"name":"Size Range","values":["6-32","M3-M10","M4-M10"],"unit":"mm"},{"name":"Speed","values":["1200","1500","1800","2000"],"unit":"rpm"},{"name":"Teeth Per Inch","values":["7"],"unit":"TPI"},{"name":"Tip Size","values":["PH0","PH2"],"unit":null},{"name":"UV Protection","values":["UV400"],"unit":null},{"name":"Ventilation","values":["Yes"],"unit":null},{"name":"Vibration Rate","values":["12000","14000"],"unit":"rpm"},{"name":"Voltage","values":["12","18","20","220","24"],"unit":"V"},{"name":"Warranty","values":["1","2","3","5","Lifetime"],"unit":"years"},{"name":"Weight","values":["120","1200","1500","1600","180","1800","18000","200","2100","220","250","25000","280","300","320","3200","340","350","35000","380","400","4200","45","450","4500","45000","500","5000","520","550","567","60","650","800","85"],"unit":"g"}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 1753e337-84dc-4aae-816e-fc48f0b08dd1 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 345 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+new-1792245612408@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:12 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":"QA","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+new-1792245612408@test.local","id":"01m552kg5a890kvbmsptpr00b0","created_at":"2026-10-17 14:00:12","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Has id | 1 | 0 | 0 |
| Email = the one sent | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | e691cd8b-767d-45b5-8cf1-66887c1637ee |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 95 |
{
"email": "qa+new-1792245612408@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:13 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | d072e85d-9e37-484f-88ee-73a5325c860d |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 340 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+a-1792245587396@test.local",
"password": "Qa-Test!2026#1792245613261"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:13 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"email":["A customer with this email address already exists."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 409 | 1 | 0 | 0 |
| Validation error on email | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | a87d2b93-bd24-4584-b0d5-74ad99e130a4 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 316 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+1792245613698@test.local",
"password": "Ab1!"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:13 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"password":["The password field must be at least 8 characters."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on password | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 25a7a128-3d94-41ea-b95f-35f1a4af7394 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 326 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+1792245614024@test.local",
"password": "parolasimpla1!"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:14 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"password":["The password field must contain at least one uppercase and one lowercase letter."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on password | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 91ab0541-5b35-48eb-b95d-5da10dd91e8c |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 325 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+1792245614336@test.local",
"password": "ParolaSimpla!"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:14 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"password":["The password field must contain at least one number."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on password | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | d9761c70-2b30-401c-9611-eab713a648a8 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 325 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+1792245614661@test.local",
"password": "ParolaSimpla1"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:14 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"password":["The password field must contain at least one symbol."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on password | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 65cad199-3f1e-494b-94cb-b15df2c2eaa6 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 338 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa-fara-arond-1792245587396",
"password": "Qa-Test!2026#1792245614972"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:15 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":"QA","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa-fara-arond-1792245587396","id":"01m552kjkvc18nkd0f3z14bxqh","created_at":"2026-10-17 14:00:15","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 0 | 1 | 0 |
| Validation error on email | 1 | 0 | 0 |
| Total | 1 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status 422 | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | c9777cfa-dedb-4630-a5b3-4c1a0913c270 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:15 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":["The first name field is required."],"last_name":["The last name field is required."],"email":["The email field is required."],"password":["The password field is required."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| At least one validation error | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 4a2ebadb-efc1-436b-ab0e-63f7083f1e23 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 316 |
{
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+1792245615745@test.local",
"password": "Qa-Test!2026#1792245615745"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:15 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":["The first name field is required."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| At least one validation error | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 1e8577be-8b84-47aa-88c8-aac468fda3e8 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 294 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+1792245616164@test.local"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:16 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"password":["The password field is required."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| At least one validation error | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 70094105-b9e2-48d4-941b-1ae1005c759e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 338 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+1792245616475@test.local",
"password": "Qa-Test!2026#1792245616475"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:16 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":"QA","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+1792245616475@test.local","id":"01m552km2yakbc35a1akzkggtk","created_at":"2026-10-17 14:00:16","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| No sensitive fields | 1 | 0 | 0 |
| No bcrypt hash value | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 2befa61f-204a-4b9c-9940-bf937c7f5f80 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 362 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+ra-1792245616926@test.local",
"password": "[password masked]",
"role": "admin"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:17 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":"QA","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+ra-1792245616926@test.local","id":"01m552kmhja8v5v80jbv0grpnd","created_at":"2026-10-17 14:00:17","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [201, 422] | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 483d6036-9add-4172-a7ba-ab9018c26df6 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 93 |
{
"email": "qa+ra-1792245616926@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:17 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 007a2061-833f-4994-b0f8-8d877a426682 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:17 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Forbidden"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 403] | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 1a8f30ed-a5b6-4868-9c0a-9bb151974354 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:18 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 59 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Forbidden"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 403] | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | da8d7e88-8879-43bc-b55a-e5634fcc3728 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 338 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "2016-10-17",
"email": "qa+1792245618589@test.local",
"password": "Qa-Test!2026#1792245618589"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:18 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"dob":["Customer must be 18 years old."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on dob | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 52533ef9-ef47-44a0-8ab2-5b17118794f7 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 338 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "01-01-1990",
"email": "qa+1792245619022@test.local",
"password": "Qa-Test!2026#1792245619022"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:19 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"dob":["The dob field must match the format Y-m-d."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on dob | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9b5e2ec6-866a-493d-b626-72776983f91c |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 336 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "12345"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+1792245619457@test.local",
"password": "Qa-Test!2026#1792245619457"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:19 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"address.postal_code":["The postal code format is not valid for the selected country."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on address.postal_code | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 628de3cf-dc92-4fdb-aa52-5b1dc7e6dd67 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 338 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "US",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+1792245619877@test.local",
"password": "Qa-Test!2026#1792245619877"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:20 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"address.postal_code":["The postal code format is not valid for the selected country."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on address.postal_code | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 0269b4d3-5df4-48d4-8504-7710a385c8d2 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 376 |
{
"first_name": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+1792245620311@test.local",
"password": "Qa-Test!2026#1792245620311"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:20 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+1792245620311@test.local","id":"01m552kqv4mnywed6hfdfmar1f","created_at":"2026-10-17 14:00:20","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 7b38e1fb-a6eb-4dae-a047-eb8cb7f2f1a2 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 352 |
{
"first_name": "QA",
"last_name": "AAAAAAAAAAAAAAAAAAAA",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+1792245620779@test.local",
"password": "Qa-Test!2026#1792245620779"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:21 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":"QA","last_name":"AAAAAAAAAAAAAAAAAAAA","phone":"0612345678","dob":"1990-01-01","email":"qa+1792245620779@test.local","id":"01m552kr9sjx6n2z2pyr1xpj4r","created_at":"2026-10-17 14:00:21","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 206c4e77-8104-4379-8be8-24cb2c3b6e5e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 352 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "111111111111111111111111",
"dob": "1990-01-01",
"email": "qa+1792245621226@test.local",
"password": "Qa-Test!2026#1792245621226"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:21 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":"QA","last_name":"Tester","phone":"111111111111111111111111","dob":"1990-01-01","email":"qa+1792245621226@test.local","id":"01m552krr7t2y73n2fwhdam06t","created_at":"2026-10-17 14:00:21","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 6975fe21-aa0e-434a-8c0d-5436182c03ae |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 377 |
{
"first_name": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+1792245621693@test.local",
"password": "Qa-Test!2026#1792245621693"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:21 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":["The first name field must not be greater than 40 characters."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| No server error (5xx) | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 1ff8ff7a-4941-4d94-bb97-bdcd298b66a0 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 353 |
{
"first_name": "QA",
"last_name": "AAAAAAAAAAAAAAAAAAAAA",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+1792245622113@test.local",
"password": "Qa-Test!2026#1792245622113"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:22 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"last_name":["The last name field must not be greater than 20 characters."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| No server error (5xx) | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 7e6485dd-97a8-48ed-8cb3-1d2dadaa315a |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 353 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "1111111111111111111111111",
"dob": "1990-01-01",
"email": "qa+1792245622486@test.local",
"password": "Qa-Test!2026#1792245622486"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:22 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"phone":["The phone field must not be greater than 24 characters."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| No server error (5xx) | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 8ab1a230-282e-4c03-87f5-f0cc60f5e8ee |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 91 |
{
"email": "qa+a-1792245587396@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:23 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| access_token not empty | 1 | 0 | 0 |
| token_type = bearer | 1 | 0 | 0 |
| expires_in positive | 1 | 0 | 0 |
| No sensitive fields | 1 | 0 | 0 |
| Total | 5 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 74c7e567-a9d6-49f7-9912-a44301a56548 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:23 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552jz1by17vr3sx9zcb1275","provider":null,"first_name":"QA","last_name":"UserA","phone":"0612345678","dob":"1990-01-01","email":"qa+a-1792245587396@test.local","totp_enabled":false,"created_at":"2026-10-17 13:59:55","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Email = emailA | 1 | 0 | 0 |
| Id = userIdA | 1 | 0 | 0 |
| No sensitive fields | 1 | 0 | 0 |
| Total | 4 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 832f65d4-79dc-44e4-9249-9dacd02d618f |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:23 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No user data | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 2d4f3f99-c34a-4553-ba7a-422f478d9a19 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:24 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 64c24439-77c9-4a6c-a06a-77cd512f2fb3 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:24 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 79640a5f-949f-4677-b95d-0085031eef93 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 75 |
{
"email": "qa+a-1792245587396@test.local",
"password": "Gresita!123"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:24 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No access_token in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 365f7507-6c7a-4e4a-927a-4f6d60687aee |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 80 |
{
"email": "nu-exista-1792245587396@test.local",
"password": "Gresita!123"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:25 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No access_token in response | 1 | 0 | 0 |
| Same message as for the wrong password | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | c1000741-e50f-4431-b5a8-a41376b56b18 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 91 |
{
"email": "qa+a-1792245587396@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:25 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 07dc3f29-ef55-47ea-b4dc-312c481fcb9e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 59 |
{ "email": "customer-fara-arond", "password": "welcome01" }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:25 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 422] | 1 | 0 | 0 |
| No access_token in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | be2ee8a9-9359-46d7-b339-2defb9ae8581 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 29 |
{
"password": "welcome01"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:26 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Invalid login request"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 422] | 1 | 0 | 0 |
| No access_token in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 8382fe17-1fed-4f2f-8878-fb13657b8352 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 53 |
{
"email": "customer@practicesoftwaretesting.com"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:26 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Invalid login request"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 422] | 1 | 0 | 0 |
| No access_token in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 30108d01-7cc7-48cf-b72d-ce95181d65a7 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:26 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Invalid login request"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 422] | 1 | 0 | 0 |
| No access_token in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 680edb17-2758-4092-88df-021e89a54c82 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 91 |
{
"email": "qa+a-1792245587396@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:27 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | d1d0af99-7db1-40bc-bb0b-6bfa853e4502 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:27 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| New token, different from the old one | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 0b85adfc-baf6-474b-b8dd-3eabfec2f1fe |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:27 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552jz1by17vr3sx9zcb1275","provider":null,"first_name":"QA","last_name":"UserA","phone":"0612345678","dob":"1990-01-01","email":"qa+a-1792245587396@test.local","totp_enabled":false,"created_at":"2026-10-17 13:59:55","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 442b3580-6b9e-4580-88d5-1035d01dae77 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:28 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [200, 401] | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 32f3937e-a82b-4762-a265-82c171b309ae |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 91 |
{
"email": "qa+a-1792245587396@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:28 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 260e82d4-38bc-4876-9227-6830b7c2f8a2 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:28 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552jz1by17vr3sx9zcb1275","provider":null,"first_name":"QA","last_name":"UserA","phone":"0612345678","dob":"1990-01-01","email":"qa+a-1792245587396@test.local","totp_enabled":false,"created_at":"2026-10-17 13:59:55","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | fac65243-38ee-4fa6-9b8e-b7dd15f940d6 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:29 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Successfully logged out"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | b2ac2f4b-b544-4e08-8d0d-0771b3df75b3 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:29 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 6209591a-263c-44ea-95fc-f1276d8f35dd |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 118 |
{ "current_password": "Gresita!123", "new_password": "Nou-Pass!2026x", "new_password_confirmation": "Nou-Pass!2026x" }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:29 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"success":false,"message":"Your current password does not matches with the password."}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 400 | 1 | 0 | 0 |
| success = false | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | bf814a66-188f-4d2d-95e5-9dd386bf166d |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 91 |
{
"email": "qa+a-1792245587396@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:30 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | ea1cd3ea-009c-4b8b-82fe-f778f9ea2064 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 160 |
{ "current_password": "[password masked]", "new_password": "[password masked]", "new_password_confirmation": "[password masked]" }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:30 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"success":false,"message":"New Password cannot be same as your current password."}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 400 | 1 | 0 | 0 |
| success = false | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | cee45da6-691f-4738-9bfc-9b250bad27a5 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 118 |
{
"current_password": "[password masked]",
"new_password": "abc",
"new_password_confirmation": "abc"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:30 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The new password field must be at least 8 characters. (and 3 more errors)","errors":{"new_password":["The new password field must be at least 8 characters.","The new password field must contain at least one uppercase and one lowercase letter.","The new password field must contain at least one symbol.","The new password field must contain at least one number."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on new_password | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | fb0f1850-cc03-4b36-b1bd-b96f5d951c87 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 136 |
{
"current_password": "[password masked]",
"new_password": "parolasimpla",
"new_password_confirmation": "parolasimpla"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:31 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The new password field must contain at least one uppercase and one lowercase letter. (and 2 more errors)","errors":{"new_password":["The new password field must contain at least one uppercase and one lowercase letter.","The new password field must contain at least one symbol.","The new password field must contain at least one number."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on new_password | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 20bcaafc-d0fd-454a-9070-82738aaef8b3 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 141 |
{
"current_password": "[password masked]",
"new_password": "Nou-Pass!2026x",
"new_password_confirmation": "Alta-Pass!2026y"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:31 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The new password field confirmation does not match.","errors":{"new_password":["The new password field confirmation does not match."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on new_password | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 653f4ba9-03cd-421d-aa13-bce3abb9c10e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 91 |
{
"email": "qa+a-1792245587396@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:32 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 1252e868-8bee-4bbb-841f-b9b63b052ad4 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 253 |
{
"first_name": "QA-Modificat",
"last_name": "Tester",
"email": "qa+a-1792245587396@test.local",
"phone": "0612345678",
"address": {
"street": "Teststraat 2",
"city": "Amsterdam",
"country": "NL",
"postal_code": "1011 AB"
}
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:32 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"success":true}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| success = true | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9cd7830c-d705-4370-939b-0659d1ac69f3 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:32 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552jz1by17vr3sx9zcb1275","provider":null,"first_name":"QA-Modificat","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+a-1792245587396@test.local","totp_enabled":false,"created_at":"2026-10-17 13:59:55","address":{"street":"Teststraat 2","house_number":null,"city":"Amsterdam","state":null,"country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| first_name updated | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | f51e1aa8-46b2-4557-a2c9-484817039802 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 272 |
{
"first_name": "QA-Modificat",
"last_name": "Tester",
"email": "qa+a-1792245587396@test.local",
"phone": "0612345678",
"address": {
"street": "Teststraat 2",
"city": "Amsterdam",
"country": "NL",
"postal_code": "1011 AB"
},
"role": "admin"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:33 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Only admins can update the role."}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 96bc775d-7b7f-458f-979c-34575d527a72 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 21 |
{
"role": "admin"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:33 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"success":true}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9512699d-cc8d-46cf-9d3b-ce1ddb66d434 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 91 |
{
"email": "qa+a-1792245587396@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:33 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | dae951bd-97f2-4445-9cd9-3612e3f7c7cb |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:34 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Forbidden"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 403] | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 52e4cce7-9dd6-4c26-9367-34be62412d1a |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:34 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552m5kn0cy18sy8da5rw1p8"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Has id | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 18c1b0db-6f3a-4554-a09e-4b4cba64646b |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH28NG35XD8J04PGAJXN",
"quantity": 1
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:34 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"item added or updated"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 77e6e473-0d29-4302-b654-f678f64b703a |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:35 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552m5kn0cy18sy8da5rw1p8","additional_discount_percentage":null,"lat":null,"lng":null,"cart_items":[{"id":"01m552m5x9fwkqnt0r4zf9ej51","quantity":1,"discount_percentage":null,"cart_id":"01m552m5kn0cy18sy8da5rw1p8","product_id":"01M552JH28NG35XD8J04PGAJXN","product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false}}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Single line for the product | 1 | 0 | 0 |
| Quantity 1 | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | d127e3bb-0a11-498a-b32c-b6aef699a81b |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH28NG35XD8J04PGAJXN",
"quantity": 1
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:35 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"item added or updated"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 10405586-a95f-4b68-88c3-ff93e4299911 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:35 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552m5kn0cy18sy8da5rw1p8","additional_discount_percentage":null,"lat":null,"lng":null,"cart_items":[{"id":"01m552m5x9fwkqnt0r4zf9ej51","quantity":2,"discount_percentage":null,"cart_id":"01m552m5kn0cy18sy8da5rw1p8","product_id":"01M552JH28NG35XD8J04PGAJXN","product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false}}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| No duplicate line | 1 | 0 | 0 |
| Quantity 2 | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 2e7ab1b9-ee9a-4b72-a9cd-7f68838d7468 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH28NG35XD8J04PGAJXN",
"quantity": 5
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:36 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"item added or updated"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 22f2679f-3ea2-4d7b-9d2a-6ef87e71222d |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:36 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552m5kn0cy18sy8da5rw1p8","additional_discount_percentage":null,"lat":null,"lng":null,"cart_items":[{"id":"01m552m5x9fwkqnt0r4zf9ej51","quantity":5,"discount_percentage":null,"cart_id":"01m552m5kn0cy18sy8da5rw1p8","product_id":"01M552JH28NG35XD8J04PGAJXN","product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false}}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Quantity 5 | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 3301bd0a-c918-4bdd-bf0c-7f04468bee69 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 61 |
{ "product_id": "01M552JH28NG35XD8J04PGAJXN", "quantity": 0 }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:36 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The quantity field must be at least 1.","errors":{"quantity":["The quantity field must be at least 1."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on quantity | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 46fd6304-8d6e-4560-8301-c6c77a9347a5 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 61 |
{ "product_id": "01M552JH28NG35XD8J04PGAJXN", "quantity": 0 }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:37 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The quantity field must be at least 1.","errors":{"quantity":["The quantity field must be at least 1."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on quantity | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 833c02fe-39ee-41bb-be31-75f2e708596a |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 62 |
{ "product_id": "01M552JH28NG35XD8J04PGAJXN", "quantity": -1 }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:37 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The quantity field must be at least 1.","errors":{"quantity":["The quantity field must be at least 1."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on quantity | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 613fa121-d7ea-4127-9231-2ffa8782013e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 62 |
{ "product_id": "01M552JH28NG35XD8J04PGAJXN", "quantity": -1 }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:37 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The quantity field must be at least 1.","errors":{"quantity":["The quantity field must be at least 1."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on quantity | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 8fa42ad0-b90f-432c-804a-bbb0708bf49c |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 63 |
{ "product_id": "01M552JH28NG35XD8J04PGAJXN", "quantity": 100 }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:38 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The quantity field must not be greater than 99.","errors":{"quantity":["The quantity field must not be greater than 99."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on quantity | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | aaf0148c-8bf7-4df4-9e76-4245dbfa069d |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 63 |
{ "product_id": "01M552JH28NG35XD8J04PGAJXN", "quantity": 100 }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:38 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The quantity field must not be greater than 99.","errors":{"quantity":["The quantity field must not be greater than 99."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on quantity | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | dd70f3cb-0432-44f6-ae17-9549e4942a5b |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{ "product_id": "01M552JH28NG35XD8J04PGAJXN", "quantity": "abc" }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:38 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The quantity field must be an integer.","errors":{"quantity":["The quantity field must be an integer."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on quantity | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | d1daef8e-faa4-432e-ad94-14e05dcc7610 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{ "product_id": "01M552JH28NG35XD8J04PGAJXN", "quantity": "abc" }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:39 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The quantity field must be an integer.","errors":{"quantity":["The quantity field must be an integer."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on quantity | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | d19d3e21-ea5f-45cf-b3a2-90fff4054ac9 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 63 |
{ "product_id": "01M552JH28NG35XD8J04PGAJXN", "quantity": 1.5 }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:39 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The quantity field must be an integer.","errors":{"quantity":["The quantity field must be an integer."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on quantity | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 869cf019-633b-4a1d-b795-0cf1d5f2d145 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 63 |
{ "product_id": "01M552JH28NG35XD8J04PGAJXN", "quantity": 1.5 }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:39 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The quantity field must be an integer.","errors":{"quantity":["The quantity field must be an integer."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on quantity | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 0fb6c639-219f-49ad-8b6a-a058adf685f2 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 61 |
{ "product_id": "01M552JH28NG35XD8J04PGAJXN", "quantity": 1 }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:40 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"item added or updated"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 1a806315-db02-4760-80ba-c1a88b3b78ac |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 62 |
{ "product_id": "01M552JH28NG35XD8J04PGAJXN", "quantity": 99 }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:40 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"item added or updated"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 8c905eb1-6180-458e-a74f-7d8f1f2ffac0 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:40 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552mbhx1va8a1f2dwsvwap4"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 15a05c45-9829-4156-9da3-983857daa807 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH28NG35XD8J04PGAJXN",
"quantity": 1
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:41 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"item added or updated"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | b3efd45e-fcfc-4c41-887f-140c514fdedd |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH2AG9122BMKVRF3XH0Z",
"quantity": 1
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:41 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"item added or updated"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 1725d77a-9559-4bf7-8c4e-30b4749411c1 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:41 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 204 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 1afdee77-f848-4349-89fc-35a0667e498d |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:42 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552mbhx1va8a1f2dwsvwap4","additional_discount_percentage":null,"lat":null,"lng":null,"cart_items":[{"id":"01m552mc5dnsez6tm6djqcy71h","quantity":1,"discount_percentage":null,"cart_id":"01m552mbhx1va8a1f2dwsvwap4","product_id":"01M552JH2AG9122BMKVRF3XH0Z","product":{"id":"01M552JH2AG9122BMKVRF3XH0Z","name":"Pliers","description":"Reliable general-purpose pliers crafted from drop-forged carbon steel for long-lasting durability in demanding working conditions. The serrated jaws provide a firm grip on a variety of materials including wire, nails, small fasteners, and irregularly shaped objects. Comfortable rubber-coated handles absorb vibration and reduce hand fatigue during extended use, while the non-slip surface ensures confident handling. The precision pivot joint maintains alignment under load, delivering smooth, controlled jaw action with every squeeze. Heat-treated steel construction resists wear and deformation even under heavy use. A must-have foundational tool for any workshop, equally suited for professional tradespeople and home repair projects.","price":12.01,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false}}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Only the second product remains | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 89bf39d2-0dda-4d42-880b-01000f81d9e1 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:42 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552m5kn0cy18sy8da5rw1p8","additional_discount_percentage":null,"lat":null,"lng":null,"cart_items":[{"id":"01m552m5x9fwkqnt0r4zf9ej51","quantity":99,"discount_percentage":null,"cart_id":"01m552m5kn0cy18sy8da5rw1p8","product_id":"01M552JH28NG35XD8J04PGAJXN","product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false}}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| cart_items is a list | 1 | 0 | 0 |
| Each line has product, quantity and price | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 21fbe162-fc67-4090-840d-d83d05210539 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:42 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552mdc3ejwy55fst2hv5wws"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | cc3e7e22-ce68-4b12-aaf9-5facbad6fdbd |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH28NG35XD8J04PGAJXN",
"quantity": 2
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:42 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"item added or updated"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | c3a5cba8-1aa7-4b0b-a863-9be4d5ffab36 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH2AG9122BMKVRF3XH0Z",
"quantity": 3
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:43 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"item added or updated"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 2f3d9961-5126-4f49-80fd-daace46eec38 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:43 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552mdc3ejwy55fst2hv5wws","additional_discount_percentage":null,"lat":null,"lng":null,"cart_items":[{"id":"01m552mdp035tne7y4n59w5q48","quantity":2,"discount_percentage":null,"cart_id":"01m552mdc3ejwy55fst2hv5wws","product_id":"01M552JH28NG35XD8J04PGAJXN","product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false}},{"id":"01m552me07yg0wgw3wnrq23kth","quantity":3,"discount_percentage":null,"cart_id":"01m552mdc3ejwy55fst2hv5wws","product_id":"01M552JH2AG9122BMKVRF3XH0Z","product":{"id":"01M552JH2AG9122BMKVRF3XH0Z","name":"Pliers","description":"Reliable general-purpose pliers crafted from drop-forged carbon steel for long-lasting durability in demanding working conditions. The serrated jaws provide a firm grip on a variety of materials including wire, nails, small fasteners, and irregularly shaped objects. Comfortable rubber-coated handles absorb vibration and reduce hand fatigue during extended use, while the non-slip surface ensures confident handling. The precision pivot joint maintains alignment under load, delivering smooth, controlled jaw action with every squeeze. Heat-treated steel construction resists wear and deformation even under heavy use. A must-have foundational tool for any workshop, equally suited for professional tradespeople and home repair projects.","price":12.01,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false}}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Cart prices = catalog prices | 1 | 0 | 0 |
| Cart total = calculated total | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 70d2108f-1874-4aa4-b822-7371ad782f8e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01AAAAAAAAAAAAAAAAAAAAAAAA",
"quantity": 1
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:43 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The selected product id is invalid.","errors":{"product_id":["The selected product id is invalid."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on product_id | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 7e9587c9-1591-49de-baf5-7d438dcf18d8 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:44 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552m5kn0cy18sy8da5rw1p8","additional_discount_percentage":null,"lat":null,"lng":null,"cart_items":[{"id":"01m552m5x9fwkqnt0r4zf9ej51","quantity":99,"discount_percentage":null,"cart_id":"01m552m5kn0cy18sy8da5rw1p8","product_id":"01M552JH28NG35XD8J04PGAJXN","product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false}}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Line was not added | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | f1a51a53-998c-4e5b-8aa6-e27df150e22b |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH28NG35XD8J04PGAJXN",
"quantity": 1
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:44 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Cart not found"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 404 | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 5f15a70e-2f1b-431e-b038-f66600e560a8 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:00:44 GMT |
| ETag | "3e56e8a4a684a8d65ec8c18bf745f7bc" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JH2K9QV3KQSQ6ZBBD61D","name":"Thor Hammer","description":"The legendary Thor Hammer combines premium craftsmanship with raw striking power in a tool that is truly built to last generations. Forged from Uru metal with a hand-wrapped leather grip, this extraordinary 5kg masterpiece delivers unmatched impact force for the most demanding demolition, forging, and heavy construction tasks. The perfectly balanced oversized head ensures every swing transfers maximum energy to the target, while the enlarged striking face covers more surface area than any conventional hammer. Despite its impressive mass, the ergonomic handle design and precise weight distribution allow for surprisingly controlled, accurate swings. This is not merely a tool but a statement piece for those who accept nothing less than the absolute best in their workshop. Comes with a lifetime warranty because true legends never fade. Please note: only one Thor Hammer is permitted per customer.","price":11.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7T","by_name":"ANIRUDH","by_url":"https:\/\/unsplash.com\/@lanirudhreddy","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/3esjG-nlgyk","file_name":"hammer04.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}],"from":1,"last_page":1,"per_page":9,"to":1,"total":1}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Thor Hammer found | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | f86f1b4d-c78d-4f49-8022-b46d9cb22f5c |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:45 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552mfwcvb2qhx75wnjks7ny"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 0b2d43f9-b15e-43ce-84d9-278508dc3511 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH2K9QV3KQSQ6ZBBD61D",
"quantity": 2
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:45 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"You can only have one Thor Hammer in the cart."}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 400 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 2d85cd01-1873-4e03-90ae-ba5a7eebe4b3 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH2K9QV3KQSQ6ZBBD61D",
"quantity": 1
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:45 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"item added or updated"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | a21fd824-b102-4fa2-bc6f-267faabfbc03 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH2K9QV3KQSQ6ZBBD61D",
"quantity": 1
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:46 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"You can only have one Thor Hammer in the cart."}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 400 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9b9de2a1-e380-48aa-91fe-9a56a5ce631a |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH2K9QV3KQSQ6ZBBD61D",
"quantity": 2
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:46 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"You can only have one Thor Hammer in the cart."}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 400 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | fd361a94-1e2c-481a-b3d6-63ff36c4e0c2 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:46 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552mfwcvb2qhx75wnjks7ny","additional_discount_percentage":null,"lat":null,"lng":null,"cart_items":[{"id":"01m552mgg03dqems8hy9xkdfwq","quantity":1,"discount_percentage":null,"cart_id":"01m552mfwcvb2qhx75wnjks7ny","product_id":"01M552JH2K9QV3KQSQ6ZBBD61D","product":{"id":"01M552JH2K9QV3KQSQ6ZBBD61D","name":"Thor Hammer","description":"The legendary Thor Hammer combines premium craftsmanship with raw striking power in a tool that is truly built to last generations. Forged from Uru metal with a hand-wrapped leather grip, this extraordinary 5kg masterpiece delivers unmatched impact force for the most demanding demolition, forging, and heavy construction tasks. The perfectly balanced oversized head ensures every swing transfers maximum energy to the target, while the enlarged striking face covers more surface area than any conventional hammer. Despite its impressive mass, the ergonomic handle design and precise weight distribution allow for surprisingly controlled, accurate swings. This is not merely a tool but a statement piece for those who accept nothing less than the absolute best in their workshop. Comes with a lifetime warranty because true legends never fade. Please note: only one Thor Hammer is permitted per customer.","price":11.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false}}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| At most one item | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 92cdd333-e546-4fea-806b-eaec26f6b43e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:47 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552mhpm4nmwdpyez1jye9wz"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 4f83b6de-ca7c-43f7-88a7-a05b0b7c32ad |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:47 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 204 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 4495ec1b-40a9-44a6-80b1-e08ae827dc71 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:47 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Requested item not found"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 404 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | f856b735-be93-481f-87a7-f8ca39c9dbe7 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 202 |
{
"payment_method": "credit-card",
"payment_details": {
"credit_card_number": "1111-2222-3333-4444",
"expiration_date": "12/2030",
"cvv": "123",
"card_holder_name": "QA Tester"
}
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:47 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Payment was successful"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Payment was successful | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | dc06144e-18cd-4449-ba99-f5a49bd48227 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 199 |
{
"payment_method": "credit-card",
"payment_details": {
"credit_card_number": "1111222233334444",
"expiration_date": "12/2030",
"cvv": "123",
"card_holder_name": "QA Tester"
}
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:50 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The payment details.credit card number field format is invalid.","errors":{"payment_details.credit_card_number":["The payment details.credit card number field format is invalid."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Payment is not confirmed | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 6a1f6737-a6c0-4769-bb16-54eeb3985dc2 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 202 |
{
"payment_method": "credit-card",
"payment_details": {
"credit_card_number": "1111-2222-3333-4444",
"expiration_date": "01/2020",
"cvv": "123",
"card_holder_name": "QA Tester"
}
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:50 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The payment details.expiration date field must be a date after today.","errors":{"payment_details.expiration_date":["The payment details.expiration date field must be a date after today."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Payment is not confirmed | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 728a736e-8650-4256-a7b0-decb1928fbba |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 201 |
{
"payment_method": "credit-card",
"payment_details": {
"credit_card_number": "1111-2222-3333-4444",
"expiration_date": "12/2030",
"cvv": "12",
"card_holder_name": "QA Tester"
}
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:51 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The payment details.cvv field format is invalid.","errors":{"payment_details.cvv":["The payment details.cvv field format is invalid."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Payment is not confirmed | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 350a7211-bbfd-42ea-b48f-ad7bf6f12f33 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 198 |
{
"payment_method": "credit-card",
"payment_details": {
"credit_card_number": "1111-2222-3333-4444",
"expiration_date": "12/2030",
"cvv": "123",
"card_holder_name": "QA123"
}
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:51 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The payment details.card holder name field format is invalid.","errors":{"payment_details.card_holder_name":["The payment details.card holder name field format is invalid."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Payment is not confirmed | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | fe9b8da4-82bd-4289-9af6-5f709a2c274d |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 58 |
{
"payment_method": "bitcoin",
"payment_details": {}
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:51 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Payment was successful"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 0 | 1 | 0 |
| Does not confirm payment | 0 | 1 | 0 |
| Total | 0 | 2 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status 422 | |
| Does not confirm payment | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 614e63e9-7df3-4386-9758-fcf19b930abb |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:52 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Payment was successful"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 0 | 1 | 0 |
| Does not confirm payment | 0 | 1 | 0 |
| Total | 0 | 2 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status 422 | |
| Does not confirm payment | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 3820a9c7-0c94-4d9f-aaf3-92661f9994ed |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 164 |
{
"payment_method": "bank-transfer",
"payment_details": {
"bank_name": "Test Bank",
"account_name": "QA Tester",
"account_number": "123456789"
}
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:52 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Payment was successful"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9d3c93d6-7b2c-45d6-b8d4-deb64ba32775 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 137 |
{
"payment_method": "gift-card",
"payment_details": {
"gift_card_number": "ABCD1234EFGH5678",
"validation_code": "AB12"
}
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:52 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Payment was successful"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | e438fdf2-4b2c-4863-ae6e-0e5aec541aaf |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 101 |
{
"payment_method": "buy-now-pay-later",
"payment_details": {
"monthly_installments": 3
}
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:53 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Payment was successful"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 70cf1bd5-32a6-4de9-a4ea-a7b772f05f74 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 159 |
{
"payment_method": "bank-transfer",
"payment_details": {
"bank_name": "Test Bank",
"account_name": "QA Tester",
"account_number": "12AB"
}
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:53 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The payment details.account number field format is invalid.","errors":{"payment_details.account_number":["The payment details.account number field format is invalid."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 8fa2222f-dffa-46cb-85ea-d5b544c50519 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 136 |
{
"payment_method": "gift-card",
"payment_details": {
"gift_card_number": "ABCD1234EFGH567",
"validation_code": "AB12"
}
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:53 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The payment details.gift card number field format is invalid.","errors":{"payment_details.gift_card_number":["The payment details.gift card number field format is invalid."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 609065de-1739-4420-9368-38d4851c393e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 68 |
{
"payment_method": "buy-now-pay-later",
"payment_details": {}
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:54 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The payment details.monthly installments field is required.","errors":{"payment_details.monthly_installments":["The payment details.monthly installments field is required."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 4bd48540-5aa2-45ba-9cb0-2aa253233b35 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 272 |
{
"billing_street": "Teststraat 1",
"billing_city": "Wezuperbrug",
"billing_state": "Drenthe",
"billing_country": "NL",
"billing_postal_code": "1011 AB",
"payment_method": "cash-on-delivery",
"payment_details": {},
"cart_id": "01m552m5kn0cy18sy8da5rw1p8"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:55 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"billing_street":"Teststraat 1","billing_city":"Wezuperbrug","billing_state":"Drenthe","billing_country":"NL","billing_postal_code":"1011 AB","user_id":"01m552jz1by17vr3sx9zcb1275","invoice_date":"2026-10-17T14:00:55.186154Z","invoice_number":"INV-2026000006","id":"01m552msn8pxbeh77194dfb5kb","created_at":"2026-10-17T14:00:55.000000Z","subtotal":1400.8500000000001,"total":1400.8500000000001,"additional_discount_percentage":null,"additional_discount_amount":0,"eco_discount_percentage":0,"eco_discount_amount":0}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 2 | 0 | 0 |
| Has id and invoice_number | 2 | 0 | 0 |
| Assigned to user A | 2 | 0 | 0 |
| Total | 6 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 1b47f314-1d51-4544-a595-d6546634f478 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:56 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552msn8pxbeh77194dfb5kb","invoice_date":"2026-10-17 14:00:55","additional_discount_percentage":null,"additional_discount_amount":0,"eco_discount_percentage":0,"eco_discount_amount":0,"invoice_number":"INV-2026000006","billing_street":"Teststraat 1","billing_city":"Wezuperbrug","billing_state":"Drenthe","billing_country":"NL","billing_postal_code":"1011 AB","subtotal":1400.85,"total":1400.85,"status":"AWAITING_FULFILLMENT","status_message":null,"created_at":"2026-10-17T14:00:55.000000Z","user_id":"01m552jz1by17vr3sx9zcb1275","invoicelines":[{"id":"01m552mt5prtepky39mtmwjhch","invoice_id":"01m552msn8pxbeh77194dfb5kb","product_id":"01M552JH28NG35XD8J04PGAJXN","unit_price":14.15,"quantity":99,"discount_percentage":null,"discounted_price":null,"product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"co2_rating":"D","is_rental":false,"in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}}],"payment":{"payment_method":"cash-on-delivery","payment_details":[]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Same number of lines as the cart | 1 | 0 | 0 |
| Same products, quantities and prices | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 60e3c6d2-88d9-42c8-a6ba-d9071dcfc2f8 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:56 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552msn8pxbeh77194dfb5kb","invoice_date":"2026-10-17 14:00:55","additional_discount_percentage":null,"additional_discount_amount":0,"eco_discount_percentage":0,"eco_discount_amount":0,"invoice_number":"INV-2026000006","billing_street":"Teststraat 1","billing_city":"Wezuperbrug","billing_state":"Drenthe","billing_country":"NL","billing_postal_code":"1011 AB","subtotal":1400.85,"total":1400.85,"status":"AWAITING_FULFILLMENT","status_message":null,"created_at":"2026-10-17T14:00:55.000000Z","user_id":"01m552jz1by17vr3sx9zcb1275","invoicelines":[{"id":"01m552mt5prtepky39mtmwjhch","invoice_id":"01m552msn8pxbeh77194dfb5kb","product_id":"01M552JH28NG35XD8J04PGAJXN","unit_price":14.15,"quantity":99,"discount_percentage":null,"discounted_price":null,"product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"co2_rating":"D","is_rental":false,"in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}}],"payment":{"payment_method":"cash-on-delivery","payment_details":[]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total = sum of lines | 1 | 0 | 0 |
| Total = cart total | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 800dff9a-4e88-474d-9680-597820932226 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:57 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"payment_method":["The payment method field is required."],"payment_details":["The payment details field must be present."],"billing_street":["The billing street field is required."],"billing_city":["The billing city field is required."],"billing_country":["The billing country field is required."],"cart_id":["The cart id field is required."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on billing_street | 1 | 0 | 0 |
| Validation error on cart_id | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | c083822f-12be-4cef-a2e8-8784aa1f3ca4 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 236 |
{
"billing_city": "Wezuperbrug",
"billing_state": "Drenthe",
"billing_country": "NL",
"billing_postal_code": "1011 AB",
"payment_method": "cash-on-delivery",
"payment_details": {},
"cart_id": "01m552m5kn0cy18sy8da5rw1p8"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:57 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"billing_street":["The billing street field is required."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on billing_street | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 57573864-f650-4658-bc29-8e0fa0d58a47 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 239 |
{
"billing_street": "Teststraat 1",
"billing_state": "Drenthe",
"billing_country": "NL",
"billing_postal_code": "1011 AB",
"payment_method": "cash-on-delivery",
"payment_details": {},
"cart_id": "01m552m5kn0cy18sy8da5rw1p8"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:57 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"billing_city":["The billing city field is required."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on billing_city | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 34dc1aec-4f42-4d8b-a81b-384ddbc5578a |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 245 |
{
"billing_street": "Teststraat 1",
"billing_city": "Wezuperbrug",
"billing_state": "Drenthe",
"billing_postal_code": "1011 AB",
"payment_method": "cash-on-delivery",
"payment_details": {},
"cart_id": "01m552m5kn0cy18sy8da5rw1p8"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:58 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"billing_country":["The billing country field is required."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on billing_country | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | e9bd6d9a-050c-4e18-ad09-f347bd8e6af3 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 229 |
{
"billing_street": "Teststraat 1",
"billing_city": "Wezuperbrug",
"billing_state": "Drenthe",
"billing_country": "NL",
"billing_postal_code": "1011 AB",
"payment_method": "cash-on-delivery",
"payment_details": {}
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:58 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"cart_id":["The cart id field is required."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on cart_id | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | ef430973-f5e8-405e-9298-ea0936a0f86b |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 247 |
{
"billing_street": "Teststraat 1",
"billing_city": "Wezuperbrug",
"billing_state": "Drenthe",
"billing_country": "NL",
"billing_postal_code": "1011 AB",
"payment_method": "cash-on-delivery",
"cart_id": "01m552m5kn0cy18sy8da5rw1p8"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:59 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"payment_details":["The payment details field must be present."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on payment_details | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | e87ca047-da66-4037-8a36-d9bb44076f25 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:59 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"street":"Bozkurtweg","house_number":"218","city":"Wezuperbrug","state":"Drenthe","country":"NL","postcode":"1011 AB"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| City returned | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 18d5e5cb-faa3-4da9-91a0-d6b28e2703bf |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 270 |
{
"billing_street": "Teststraat 1",
"billing_city": "Wezuperbrug",
"billing_state": "Drenthe",
"billing_country": "NL",
"billing_postal_code": "12345",
"payment_method": "cash-on-delivery",
"payment_details": {},
"cart_id": "01m552m5kn0cy18sy8da5rw1p8"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:00:59 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"billing_country":["The billing_country does not match the entered address. The postal code format is not valid for the selected country."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on billing_country | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | d4212567-9d1c-4ac0-9602-25ecaaa80b99 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 266 |
{
"billing_street": "Teststraat 1",
"billing_city": "Paris",
"billing_state": "Drenthe",
"billing_country": "NL",
"billing_postal_code": "1011 AB",
"payment_method": "cash-on-delivery",
"payment_details": {},
"cart_id": "01m552m5kn0cy18sy8da5rw1p8"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:00 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"billing_country":["The billing_country does not match the entered address. The city does not belong to the selected country."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on billing_country | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 6dbcf3a6-eed1-4fd6-a4a5-69113860741b |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:01 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552mzb5hymbpkmvffe6nsdg"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 777ff462-6f33-4a45-a949-f7397971e492 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH28NG35XD8J04PGAJXN",
"quantity": 1
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:01 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"item added or updated"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | a9e8dcc7-0121-455f-ab0b-1cc6be67ad1c |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 381 |
{
"billing_street": "Teststraat 1",
"billing_city": "Wezuperbrug",
"billing_state": "Drenthe",
"billing_country": "NL",
"billing_postal_code": "1011 AB",
"payment_method": "cash-on-delivery",
"payment_details": {},
"cart_id": "01m552mzb5hymbpkmvffe6nsdg",
"guest_email": "guest+1792245587396@test.local",
"guest_first_name": "Guest",
"guest_last_name": "QA"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:02 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"billing_street":"Teststraat 1","billing_city":"Wezuperbrug","billing_state":"Drenthe","billing_country":"NL","billing_postal_code":"1011 AB","user_id":null,"invoice_date":"2026-10-17T14:01:01.968478Z","invoice_number":"INV-2026000007","id":"01m552n08rzd9qm9ck073tnjxq","created_at":"2026-10-17T14:01:01.000000Z","subtotal":14.15,"total":14.15,"additional_discount_percentage":null,"additional_discount_amount":0,"eco_discount_percentage":0,"eco_discount_amount":0}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| No user_id | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 25582b39-0e28-4b4f-a3f6-db965b34c75c |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 330 |
{
"billing_street": "Teststraat 1",
"billing_city": "Wezuperbrug",
"billing_state": "Drenthe",
"billing_country": "NL",
"billing_postal_code": "1011 AB",
"payment_method": "cash-on-delivery",
"payment_details": {},
"cart_id": "01m552mzb5hymbpkmvffe6nsdg",
"guest_first_name": "Guest",
"guest_last_name": "QA"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:02 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The guest email field is required.","errors":{"guest_email":["The guest email field is required."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on guest_email | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | d8264dd2-b0e6-439f-b5f7-03cd01eaaf66 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 272 |
{
"billing_street": "Teststraat 1",
"billing_city": "Wezuperbrug",
"billing_state": "Drenthe",
"billing_country": "NL",
"billing_postal_code": "1011 AB",
"payment_method": "cash-on-delivery",
"payment_details": {},
"cart_id": "01AAAAAAAAAAAAAAAAAAAAAAAA"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:02 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Requested item not found"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [404, 422] | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 1701f8e4-d98e-410f-94fd-2812ef6106fb |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:03 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552n1g4xw4mknqkgas61k4a"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | c748180a-300b-4951-98f1-2decc4706f87 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 272 |
{
"billing_street": "Teststraat 1",
"billing_city": "Wezuperbrug",
"billing_state": "Drenthe",
"billing_country": "NL",
"billing_postal_code": "1011 AB",
"payment_method": "cash-on-delivery",
"payment_details": {},
"cart_id": "01m552n1g4xw4mknqkgas61k4a"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:03 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"billing_street":"Teststraat 1","billing_city":"Wezuperbrug","billing_state":"Drenthe","billing_country":"NL","billing_postal_code":"1011 AB","user_id":"01m552jz1by17vr3sx9zcb1275","invoice_date":"2026-10-17T14:01:03.658890Z","invoice_number":"INV-2026000009","id":"01m552n1xetfjdmzm1xg896wts","created_at":"2026-10-17T14:01:03.000000Z","subtotal":0,"total":0,"additional_discount_percentage":null,"additional_discount_amount":0,"eco_discount_percentage":0,"eco_discount_amount":0}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [404, 422] | 0 | 1 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 1 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status in [404, 422] | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 4fcae6ef-cbeb-4eab-87d8-6281b340ac55 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:04 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01m552n1xetfjdmzm1xg896wts","user_id":"01m552jz1by17vr3sx9zcb1275","invoice_number":"INV-2026000009","invoice_date":"2026-10-17 14:01:03","status":"AWAITING_FULFILLMENT","total":0,"subtotal":0,"billing_street":"Teststraat 1","billing_city":"Wezuperbrug","billing_state":"Drenthe","billing_country":"NL","billing_postal_code":"1011 AB","additional_discount_percentage":null,"additional_discount_amount":0,"invoicelines":[],"payment":{"payment_method":"cash-on-delivery"}},{"id":"01m552n164dcx8f6tdemm1sqj8","user_id":"01m552jz1by17vr3sx9zcb1275","invoice_number":"INV-2026000008","invoice_date":"2026-10-17 14:01:02","status":"AWAITING_FULFILLMENT","total":null,"subtotal":null,"billing_street":"Teststraat 1","billing_city":"Wezuperbrug","billing_state":"Drenthe","billing_country":"NL","billing_postal_code":"1011 AB","additional_discount_percentage":null,"additional_discount_amount":null,"invoicelines":[],"payment":null},{"id":"01m552msn8pxbeh77194dfb5kb","user_id":"01m552jz1by17vr3sx9zcb1275","invoice_number":"INV-2026000006","invoice_date":"2026-10-17 14:00:55","status":"AWAITING_FULFILLMENT","total":1400.85,"subtotal":1400.85,"billing_street":"Teststraat 1","billing_city":"Wezuperbrug","billing_state":"Drenthe","billing_country":"NL","billing_postal_code":"1011 AB","additional_discount_percentage":null,"additional_discount_amount":0,"invoicelines":[{"id":"01m552mt5prtepky39mtmwjhch","invoice_id":"01m552msn8pxbeh77194dfb5kb","product_id":"01M552JH28NG35XD8J04PGAJXN","unit_price":14.15,"quantity":99,"discount_percentage":null,"discounted_price":null,"product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","price":14.15,"co2_rating":"D","in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"}}}],"payment":{"payment_method":"cash-on-delivery"}},{"id":"01m552k3yvjyfr0ae67a69ct0f","user_id":"01m552jz1by17vr3sx9zcb1275","invoice_number":"INV-2026000004","invoice_date":"2026-10-17 14:00:00","status":"AWAITING_FULFILLMENT","total":14.15,"subtotal":14.15,"billing_street":"Teststraat 1","billing_city":"Wezuperbrug","billing_state":"Drenthe","billing_country":"NL","billing_postal_code":"1011 AB","additional_discount_percentage":null,"additional_discount_amount":0,"invoicelines":[{"id":"01m552k41mmx39s834ppnkwyxf","invoice_id":"01m552k3yvjyfr0ae67a69ct0f","product_id":"01M552JH28NG35XD8J04PGAJXN","unit_price":14.15,"quantity":1,"discount_percentage":null,"discounted_price":null,"product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","price":14.15,"co2_rating":"D","in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"}}}],"payment":{"payment_method":"cash-on-delivery"}}],"from":1,"last_page":1,"per_page":15,"to":4,"total":4}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| All invoices belong to A | 1 | 0 | 0 |
| B's invoice is missing | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | b0b0beee-90e1-4c87-9233-c535c7a18d08 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:04 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"status":"NOT_INITIATED"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [200, 400] | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | bad98e7f-ff38-4410-822f-07889eadd26a |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:04 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Document not created. Try again later."}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 0 | 1 | 0 |
| Content-Type PDF | 0 | 1 | 0 |
| File is not empty | 1 | 0 | 0 |
| Total | 1 | 2 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status 200 | |
| Content-Type PDF | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | cd0b7748-9f56-4ce1-9281-1815d5b3b9c2 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:05 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[],"from":null,"last_page":1,"per_page":15,"to":null,"total":0}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| No results | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9a55939f-668c-42d5-853f-bdbec60fa014 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 58 |
{ "status": "SHIPPED", "status_message": "Order shipped" }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:05 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"success":true}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| success = true | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 5dc20e8a-2024-46af-844b-22913fe1f02e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:06 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552msn8pxbeh77194dfb5kb","invoice_date":"2026-10-17 14:00:55","additional_discount_percentage":null,"additional_discount_amount":0,"eco_discount_percentage":0,"eco_discount_amount":0,"invoice_number":"INV-2026000006","billing_street":"Teststraat 1","billing_city":"Wezuperbrug","billing_state":"Drenthe","billing_country":"NL","billing_postal_code":"1011 AB","subtotal":1400.85,"total":1400.85,"status":"SHIPPED","status_message":"Order shipped","created_at":"2026-10-17T14:00:55.000000Z","user_id":"01m552jz1by17vr3sx9zcb1275","invoicelines":[{"id":"01m552mt5prtepky39mtmwjhch","invoice_id":"01m552msn8pxbeh77194dfb5kb","product_id":"01M552JH28NG35XD8J04PGAJXN","unit_price":14.15,"quantity":99,"discount_percentage":null,"discounted_price":null,"product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"co2_rating":"D","is_rental":false,"in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}}],"payment":{"payment_method":"cash-on-delivery","payment_details":[]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Status SHIPPED | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | a26c2b43-5fc2-46c0-a3ef-1c0323a08a44 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 22 |
{
"status": "LOST"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:06 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The selected status is invalid.","errors":{"status":["The selected status is invalid."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | fd634cf1-6a5d-4797-a205-3a2bf406ddb7 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 52 |
{
"status": "SHIPPED",
"status_message": "abc"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:06 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The status message field must be between 5 and 50 characters.","errors":{"status_message":["The status message field must be between 5 and 50 characters."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 4a594081-b7f3-4d07-95e9-92c90b609558 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 100 |
{
"status": "SHIPPED",
"status_message": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:07 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The status message field must be between 5 and 50 characters.","errors":{"status_message":["The status message field must be between 5 and 50 characters."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | c0ac990f-6841-426e-81cc-7ce09f6a3876 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 25 |
{ "status": "COMPLETED" }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:07 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"success":true}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status 403 | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 95c3b632-2387-4414-9a3f-1b9747de349d |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 25 |
{ "status": "COMPLETED" }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:07 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Invoice not found"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status 403 | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | cd393370-3512-4fdc-b298-5620de859ace |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:08 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552msn8pxbeh77194dfb5kb","invoice_date":"2026-10-17 14:00:55","additional_discount_percentage":null,"additional_discount_amount":0,"eco_discount_percentage":0,"eco_discount_amount":0,"invoice_number":"INV-2026000006","billing_street":"Teststraat 1","billing_city":"Wezuperbrug","billing_state":"Drenthe","billing_country":"NL","billing_postal_code":"1011 AB","subtotal":1400.85,"total":1400.85,"status":"COMPLETED","status_message":"Order shipped","created_at":"2026-10-17T14:00:55.000000Z","user_id":"01m552jz1by17vr3sx9zcb1275","invoicelines":[{"id":"01m552mt5prtepky39mtmwjhch","invoice_id":"01m552msn8pxbeh77194dfb5kb","product_id":"01M552JH28NG35XD8J04PGAJXN","unit_price":14.15,"quantity":99,"discount_percentage":null,"discounted_price":null,"product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"co2_rating":"D","is_rental":false,"in_stock":null,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}}],"payment":{"payment_method":"cash-on-delivery","payment_details":[]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Status is not COMPLETED | 0 | 1 | 0 |
| Total | 1 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status is not COMPLETED | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 58680700-f263-4575-acba-9ab616cd5e69 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 46 |
{ "product_id": "01M552JH28NG35XD8J04PGAJXN" }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:08 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"product_id":"01M552JH28NG35XD8J04PGAJXN","user_id":"01m552jz1by17vr3sx9zcb1275","id":"01m552n6pqq6shecbw6zfbprcf"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 98f54b1d-5518-41f7-85ac-6b6086fdcb4e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:08 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"id":"01m552n6pqq6shecbw6zfbprcf","user_id":"01m552jz1by17vr3sx9zcb1275","product_id":"01M552JH28NG35XD8J04PGAJXN","product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"}}}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Contains the product | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 48c6cd99-1590-4779-b50f-1a2ea857ee5a |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 48 |
{
"product_id": "01M552JH2AG9122BMKVRF3XH0Z"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:09 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"product_id":"01M552JH2AG9122BMKVRF3XH0Z","user_id":"01m552k0pjeydtzqfwz44279eb","id":"01m552n7d74hymwrkwdyh8qgxr"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 0b9ea29f-34c9-46eb-a24d-6a836d904a45 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:09 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"id":"01m552n6pqq6shecbw6zfbprcf","user_id":"01m552jz1by17vr3sx9zcb1275","product_id":"01M552JH28NG35XD8J04PGAJXN","product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"}}}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Only A's favorites | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 79baa3d3-b591-45ed-b87e-a70b58e2a1f7 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:10 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"id":"01m552n7d74hymwrkwdyh8qgxr","user_id":"01m552k0pjeydtzqfwz44279eb","product_id":"01M552JH2AG9122BMKVRF3XH0Z","product":{"id":"01M552JH2AG9122BMKVRF3XH0Z","name":"Pliers","description":"Reliable general-purpose pliers crafted from drop-forged carbon steel for long-lasting durability in demanding working conditions. The serrated jaws provide a firm grip on a variety of materials including wire, nails, small fasteners, and irregularly shaped objects. Comfortable rubber-coated handles absorb vibration and reduce hand fatigue during extended use, while the non-slip surface ensures confident handling. The precision pivot joint maintains alignment under load, delivering smooth, controlled jaw action with every squeeze. Heat-treated steel construction resists wear and deformation even under heavy use. A must-have foundational tool for any workshop, equally suited for professional tradespeople and home repair projects.","price":12.01,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7K","by_name":"Everyday basics","by_url":"https:\/\/unsplash.com\/@zanardi","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/I8eTuMmxIfo","file_name":"pliers02.avif","title":"Pliers"}}}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Only B's favorites | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 8b6f936e-0983-4ead-9b85-a4c80c78e61d |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 48 |
{
"product_id": "01M552JH28NG35XD8J04PGAJXN"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:10 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Duplicate Entry"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | a274edda-bc72-4063-bc5d-63f5619f235f |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:10 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"id":"01m552n6pqq6shecbw6zfbprcf","user_id":"01m552jz1by17vr3sx9zcb1275","product_id":"01M552JH28NG35XD8J04PGAJXN","product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"}}}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Product appears once | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 2506d7b3-68f2-4874-a01e-b8fb55c64029 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 46 |
{ "product_id": "01AAAAAAAAAAAAAAAAAAAAAAAA" }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:11 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"product_id":["The selected product id is invalid."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| Validation error on product_id | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 3c76fefd-081f-469b-9a84-b2c8244964c8 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:11 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 0efe0e5b-c05b-4aea-b4af-9d86323f387d |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 48 |
{
"product_id": "01M552JH28NG35XD8J04PGAJXN"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:11 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | e76aed97-1df8-45c3-8cbb-2468cf96c738 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 48 |
{
"product_id": "01M552JH2AG9122BMKVRF3XH0Z"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:12 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"product_id":"01M552JH2AG9122BMKVRF3XH0Z","user_id":"01m552jz1by17vr3sx9zcb1275","id":"01m552na42bbqnt3a9sb06ccf0"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 4580a25b-155d-4cdf-ba06-54c6825a60a7 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:12 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 204 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | d8ac7d5c-1f35-42b2-846c-ab4410977aa3 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:12 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"id":"01m552n6pqq6shecbw6zfbprcf","user_id":"01m552jz1by17vr3sx9zcb1275","product_id":"01M552JH28NG35XD8J04PGAJXN","product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"}}}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Favorite is gone | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | d58fc5f1-b092-4c9a-9064-aee97d8a625b |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 166 |
{ "name": "QA Tester", "email": "qa+1792245587396@test.local", "subject": "customer-service", "message": "Test message sent from Postman to check the contact form." }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:13 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"name":"QA Tester","email":"qa+1792245587396@test.local","subject":"customer-service","message":"Test message sent from Postman to check the contact form.","status":"NEW","id":"01m552nb5pc34n93r0ktpkxkyw","created_at":"2026-10-17 14:01:13"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | c60306cc-df2a-4a8c-b1a0-564a4c44f83e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 93 |
{
"subject": "customer-service",
"message": "Test message sent by user A from Postman."
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:13 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"subject":"customer-service","message":"Test message sent by user A from Postman.","user_id":"01m552jz1by17vr3sx9zcb1275","status":"NEW","id":"01m552nbn2vxb5meqh0gmw7ab2","created_at":"2026-10-17 14:01:13"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Assigned to user A | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | d2c3807e-a07a-420a-abd9-dbb16f563470 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 83 |
{
"name": "QA Tester",
"email": "qa@test.local",
"message": "Test message."
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:13 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"subject":["The subject field is required."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| No server error (5xx) | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 4e777572-a3f7-417a-bfba-a012edaf5212 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 86 |
{
"name": "QA Tester",
"email": "qa@test.local",
"subject": "customer-service"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:14 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":["The message field is required."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| No server error (5xx) | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 5762fe1e-1d9d-4e7f-bc20-8aad71d0e637 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 354 |
{
"name": "QA Tester",
"email": "qa@test.local",
"subject": "customer-service",
"message": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:14 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":["The message field must not be greater than 250 characters."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| No server error (5xx) | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 8e6d0bc8-7350-4f50-b5d5-083410a5fec0 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 113 |
{
"name": "QA Tester",
"email": "nu-e-email",
"subject": "customer-service",
"message": "Test message."
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:14 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"email":["The email field must be a valid email address."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| No server error (5xx) | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 13a9d479-bb9e-4971-b6aa-8202cfba98a5 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:15 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01m552nb5pc34n93r0ktpkxkyw","user_id":null,"name":"QA Tester","email":"qa+1792245587396@test.local","subject":"customer-service","message":"Test message sent from Postman to check the contact form.","status":"NEW","created_at":"2026-10-17 14:01:13","user":null},{"id":"01m552nbn2vxb5meqh0gmw7ab2","user_id":"01m552jz1by17vr3sx9zcb1275","name":null,"email":null,"subject":"customer-service","message":"Test message sent by user A from Postman.","status":"NEW","created_at":"2026-10-17 14:01:13","user":{"id":"01m552jz1by17vr3sx9zcb1275","provider":null,"first_name":"QA-Modificat","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+a-1792245587396@test.local","totp_enabled":false,"created_at":"2026-10-17 13:59:55","address":{"street":"Teststraat 2","house_number":null,"city":"Amsterdam","state":null,"country":"NL","postal_code":"1011 AB"},"enabled":true,"role":"user","failed_login_attempts":0}}],"from":1,"last_page":1,"per_page":15,"to":2,"total":2}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Admin sees both messages | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 2b4f0cce-3ad6-40f8-af3b-3d7526c10818 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:15 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01m552nbn2vxb5meqh0gmw7ab2","user_id":"01m552jz1by17vr3sx9zcb1275","name":null,"email":null,"subject":"customer-service","message":"Test message sent by user A from Postman.","status":"NEW","created_at":"2026-10-17 14:01:13"}],"from":1,"last_page":1,"per_page":15,"to":1,"total":1}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| A sees only own messages | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 5a09edef-c00b-4a41-845f-b244173799b5 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:15 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[],"from":null,"last_page":1,"per_page":15,"to":null,"total":0}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| B does not see A's message | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 196a6089-ed85-43c3-ae7f-5f42acb090b1 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:16 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 403, 404] | 0 | 1 | 0 |
| No data in response | 1 | 0 | 0 |
| Total | 1 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status in [401, 403, 404] | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 209f6420-6f95-4fde-9c6b-dbe8402df016 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:16 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552nbn2vxb5meqh0gmw7ab2","user_id":"01m552jz1by17vr3sx9zcb1275","name":null,"email":null,"subject":"customer-service","message":"Test message sent by user A from Postman.","status":"NEW","created_at":"2026-10-17 14:01:13","user":{"id":"01m552jz1by17vr3sx9zcb1275","provider":null,"first_name":"QA-Modificat","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+a-1792245587396@test.local","totp_enabled":false,"created_at":"2026-10-17 13:59:55","address":{"street":"Teststraat 2","house_number":null,"city":"Amsterdam","state":null,"country":"NL","postal_code":"1011 AB"}},"replies":[]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | f7a24e1b-327d-41ae-b554-bb14233d46f0 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 205 |
{"file":"gol.txt"}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:16 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"success":true}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| success = true | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 19e9dfd4-a67d-4b77-be07-e33d55282fa7 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 227 |
{"file":"continut.txt"}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:17 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"errors":["Currently we only allow empty files."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 400 | 1 | 0 | 0 |
| Explicit error message | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 50f8301c-8132-492d-987c-6939430b0af1 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 210 |
{"file":"gol.pdf"}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:17 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"errors":["The file extension is incorrect, we only accept txt files."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 400 | 1 | 0 | 0 |
| Explicit error message | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 63472ac0-d75a-46be-9935-76009018c4a9 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 0 |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:17 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"errors":["No file attached."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 400 | 1 | 0 | 0 |
| Explicit error message | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 7f2bccb8-aa19-4556-95e5-2662986b9f39 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 45 |
{
"message": "Test reply from the admin."
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:18 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Test reply from the admin.","id":"01m552ng4nw25e7fm798yyvdtd","created_at":"2026-10-17 14:01:18"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 1bec9c57-1446-48a1-ab78-530aafac205e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:18 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552nbn2vxb5meqh0gmw7ab2","user_id":"01m552jz1by17vr3sx9zcb1275","name":null,"email":null,"subject":"customer-service","message":"Test message sent by user A from Postman.","status":"IN_PROGRESS","created_at":"2026-10-17 14:01:13","user":{"id":"01m552jz1by17vr3sx9zcb1275","provider":null,"first_name":"QA-Modificat","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+a-1792245587396@test.local","totp_enabled":false,"created_at":"2026-10-17 13:59:55","address":{"street":"Teststraat 2","house_number":null,"city":"Amsterdam","state":null,"country":"NL","postal_code":"1011 AB"},"enabled":true,"role":"user","failed_login_attempts":0},"replies":[{"id":"01m552ng4nw25e7fm798yyvdtd","message":"Test reply from the admin.","created_at":"2026-10-17 14:01:18","user":{"id":"01M552JGSDY6PGB1Z42PFGTHSE","provider":null,"first_name":"John","last_name":"Doe","phone":null,"dob":"1980-01-01","email":"admin@practicesoftwaretesting.com","totp_enabled":false,"created_at":"2026-10-17 13:59:40","address":{"street":"Test street 123","house_number":null,"city":"Utrecht","state":null,"country":"The Netherlands","postal_code":null},"enabled":true,"role":"admin","failed_login_attempts":0}}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| IN_PROGRESS | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 52ace182-96a2-474c-aa9a-3f8543096120 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 26 |
{
"status": "RESOLVED"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:18 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"success":true}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 6500078b-c6c5-4dd6-8927-ef25df847aa6 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:19 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552nbn2vxb5meqh0gmw7ab2","user_id":"01m552jz1by17vr3sx9zcb1275","name":null,"email":null,"subject":"customer-service","message":"Test message sent by user A from Postman.","status":"RESOLVED","created_at":"2026-10-17 14:01:13","user":{"id":"01m552jz1by17vr3sx9zcb1275","provider":null,"first_name":"QA-Modificat","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+a-1792245587396@test.local","totp_enabled":false,"created_at":"2026-10-17 13:59:55","address":{"street":"Teststraat 2","house_number":null,"city":"Amsterdam","state":null,"country":"NL","postal_code":"1011 AB"},"enabled":true,"role":"user","failed_login_attempts":0},"replies":[{"id":"01m552ng4nw25e7fm798yyvdtd","message":"Test reply from the admin.","created_at":"2026-10-17 14:01:18","user":{"id":"01M552JGSDY6PGB1Z42PFGTHSE","provider":null,"first_name":"John","last_name":"Doe","phone":null,"dob":"1980-01-01","email":"admin@practicesoftwaretesting.com","totp_enabled":false,"created_at":"2026-10-17 13:59:40","address":{"street":"Test street 123","house_number":null,"city":"Utrecht","state":null,"country":"The Netherlands","postal_code":null},"enabled":true,"role":"admin","failed_login_attempts":0}}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| RESOLVED | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 4f832f26-b908-49a7-a676-f838e3992845 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 19 |
{ "status": "NEW" }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:19 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"success":true}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [403, 404] | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status in [403, 404] | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 996599b0-3338-41ab-99d5-87796fa4f54f |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:19 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552nbn2vxb5meqh0gmw7ab2","user_id":"01m552jz1by17vr3sx9zcb1275","name":null,"email":null,"subject":"customer-service","message":"Test message sent by user A from Postman.","status":"NEW","created_at":"2026-10-17 14:01:13","user":{"id":"01m552jz1by17vr3sx9zcb1275","provider":null,"first_name":"QA-Modificat","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+a-1792245587396@test.local","totp_enabled":false,"created_at":"2026-10-17 13:59:55","address":{"street":"Teststraat 2","house_number":null,"city":"Amsterdam","state":null,"country":"NL","postal_code":"1011 AB"},"enabled":true,"role":"user","failed_login_attempts":0},"replies":[{"id":"01m552ng4nw25e7fm798yyvdtd","message":"Test reply from the admin.","created_at":"2026-10-17 14:01:18","user":{"id":"01M552JGSDY6PGB1Z42PFGTHSE","provider":null,"first_name":"John","last_name":"Doe","phone":null,"dob":"1980-01-01","email":"admin@practicesoftwaretesting.com","totp_enabled":false,"created_at":"2026-10-17 13:59:40","address":{"street":"Test street 123","house_number":null,"city":"Utrecht","state":null,"country":"The Netherlands","postal_code":null},"enabled":true,"role":"admin","failed_login_attempts":0}}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Status stayed RESOLVED | 0 | 1 | 0 |
| Total | 1 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status stayed RESOLVED | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | deed08ef-9932-4491-8691-1eb103667171 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:20 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No data | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 94698bc6-da53-4ad6-8521-81d091ee43f9 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:20 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No data | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 63c7af8a-795f-4710-976e-a79d73a5109c |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:20 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No data | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 58141d92-7b56-4bde-be1c-9287989572b2 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:21 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No data | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 911d8abc-4488-4034-ae1f-1019e16add85 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:21 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No data | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 2adfece4-7f3e-4ccd-922e-f1ea1f82fcd1 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:21 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 59 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No data | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 61b759f6-671a-4a3c-9ab8-af56987774ea |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 0 |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:22 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No data | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9e5159eb-e394-4a82-bc1a-0648be9f931a |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:22 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Requested item not found"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 403, 404] | 1 | 0 | 0 |
| No data in response | 1 | 0 | 0 |
| No billing address | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | e532b98f-7585-45ce-9b87-6a252c8b8707 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:22 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552msn8pxbeh77194dfb5kb","invoice_date":"2026-10-17 14:00:55","additional_discount_percentage":null,"additional_discount_amount":0,"eco_discount_percentage":0,"eco_discount_amount":0,"invoice_number":"INV-2026000006","billing_street":"Teststraat 1","billing_city":"Wezuperbrug","billing_state":"Drenthe","billing_country":"NL","billing_postal_code":"1011 AB","subtotal":1400.85,"total":1400.85,"status":"COMPLETED","status_message":"Order shipped","created_at":"2026-10-17T14:00:55.000000Z","user_id":"01m552jz1by17vr3sx9zcb1275","invoicelines":[{"id":"01m552mt5prtepky39mtmwjhch","invoice_id":"01m552msn8pxbeh77194dfb5kb","product_id":"01M552JH28NG35XD8J04PGAJXN","unit_price":14.15,"quantity":99,"discount_percentage":null,"discounted_price":null,"product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"co2_rating":"D","is_rental":false,"in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}}],"payment":{"payment_method":"cash-on-delivery","payment_details":[]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | b7df9572-83de-4094-9911-63a6f381f4d0 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:23 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Document not created. Try again later."}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [403, 404] | 1 | 0 | 0 |
| Does not receive a PDF | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 5c345e0c-bb6c-4ed6-9cbc-a8ebdc7578ca |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:23 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"You are not authorized to view this user."}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 403, 404] | 1 | 0 | 0 |
| No data in response | 1 | 0 | 0 |
| No email of A | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 43b37cbf-0421-46e2-a758-473a9a0e69da |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:23 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552jz1by17vr3sx9zcb1275","provider":null,"first_name":"QA-Modificat","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+a-1792245587396@test.local","totp_enabled":false,"created_at":"2026-10-17 13:59:55","address":{"street":"Teststraat 2","house_number":null,"city":"Amsterdam","state":null,"country":"NL","postal_code":"1011 AB"},"enabled":true,"role":"user","failed_login_attempts":0}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | a9b1a3f8-6a3a-401e-85f9-5179be41ec44 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 251 |
{
"first_name": "Hacked",
"last_name": "Tester",
"email": "atacator+1792245587396@test.local",
"phone": "0612345678",
"address": {
"street": "Teststraat 2",
"city": "Amsterdam",
"country": "NL",
"postal_code": "1011 AB"
}
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:24 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"You can only update your own data."}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 8660bc35-c74d-4958-8d2b-7cf14b18b83b |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 28 |
{
"first_name": "Hacked"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:24 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"You can only update your own data."}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 221c1022-a990-44f6-bd64-9516942520ab |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:24 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552jz1by17vr3sx9zcb1275","provider":null,"first_name":"QA-Modificat","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+a-1792245587396@test.local","totp_enabled":false,"created_at":"2026-10-17 13:59:55","address":{"street":"Teststraat 2","house_number":null,"city":"Amsterdam","state":null,"country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Email unchanged | 1 | 0 | 0 |
| Name unchanged | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 45d70fa6-e917-4689-beb8-a24cfe37f6e9 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:25 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552n6pqq6shecbw6zfbprcf","user_id":"01m552jz1by17vr3sx9zcb1275","product_id":"01M552JH28NG35XD8J04PGAJXN"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 403, 404] | 0 | 1 | 0 |
| No data in response | 1 | 0 | 0 |
| Total | 1 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status in [401, 403, 404] | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | ea1d0347-14f2-4839-abf8-bbbbd07e79e0 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 44 |
{ "message": "Reply from another account." }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:25 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Reply from another account.","id":"01m552nqc63tw7zd92nkacj95s","created_at":"2026-10-17 14:01:25"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [403, 404] | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status in [403, 404] | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 35795c96-366f-48c7-a18d-96bbcdec8314 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:25 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552nqnn2cgav3zka12fx3nd"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 86d656a6-a714-4da2-8865-e33a9cfca4c9 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH28NG35XD8J04PGAJXN",
"quantity": 1
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:26 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"item added or updated"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | ad78a7cc-e5f6-4f53-99b9-0032a701e4bb |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:26 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552nqnn2cgav3zka12fx3nd","additional_discount_percentage":null,"lat":null,"lng":null,"cart_items":[{"id":"01m552nqzghs1zadqzaprayfmg","quantity":1,"discount_percentage":null,"cart_id":"01m552nqnn2cgav3zka12fx3nd","product_id":"01M552JH28NG35XD8J04PGAJXN","product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false}}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [403, 404] | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status in [403, 404] | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 43520da5-f9f9-488e-8437-2931e223195f |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:26 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552nqnn2cgav3zka12fx3nd","additional_discount_percentage":null,"lat":null,"lng":null,"cart_items":[{"id":"01m552nqzghs1zadqzaprayfmg","quantity":1,"discount_percentage":null,"cart_id":"01m552nqnn2cgav3zka12fx3nd","product_id":"01M552JH28NG35XD8J04PGAJXN","product":{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":14.15,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false}}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 403, 404] | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status in [401, 403, 404] | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | b71db845-eff0-4965-915f-c2513d547eb0 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 65 |
{
"product_id": "01M552JH2AG9122BMKVRF3XH0Z",
"quantity": 1
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:27 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"item added or updated"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 403, 404] | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status in [401, 403, 404] | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | c7b8f292-d87b-471d-8df2-946256d97e13 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:27 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552ns84664b7atw0ehavqcf"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 20e017bb-78cd-4444-92f9-c378163b9144 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:27 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 403, 404] | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status in [401, 403, 404] | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 481f9c8a-7a63-40d1-9a59-c433a9bf80c7 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:28 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552nsvf3wk1dn7xb38143kb"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 10a1bfda-9c6c-48f3-b050-8fd692aa6fbd |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 2 |
{}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:28 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552nt4sbezpvkv7bwgbedpb"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 32259575-18cd-403f-8b68-c8ebace18fa3 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:28 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Requested item not found"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 404 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | b192d255-6a8f-430f-b0d0-a48f129c7290 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:29 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JGW8Y9DHAAZAATACEXMR","provider":null,"first_name":"Jane","last_name":"Doe","phone":null,"dob":"1980-02-02","email":"customer@practicesoftwaretesting.com","totp_enabled":false,"created_at":"2026-10-17 13:59:40","address":{"street":"Test street 98","house_number":null,"city":"Vienna","state":null,"country":"Austria","postal_code":null},"enabled":true,"role":"user","failed_login_attempts":0},{"id":"01M552JGXJ5GQFPJBP8FQADST6","provider":null,"first_name":"Jack","last_name":"Howe","phone":null,"dob":"1980-03-03","email":"customer2@practicesoftwaretesting.com","totp_enabled":false,"created_at":"2026-10-17 13:59:40","address":{"street":"Test street 654","house_number":null,"city":"Frankfurt","state":null,"country":"Germany","postal_code":null},"enabled":true,"role":"user","failed_login_attempts":0},{"id":"01M552JGYVS1082V4K46EABP20","provider":null,"first_name":"Bob","last_name":"Smith","phone":null,"dob":"1985-05-05","email":"customer3@practicesoftwaretesting.com","totp_enabled":false,"created_at":"2026-10-17 13:59:40","address":{"street":"Test street 200","house_number":null,"city":"London","state":null,"country":"United Kingdom","postal_code":null},"enabled":true,"role":"user","failed_login_attempts":0},{"id":"01m552jz1by17vr3sx9zcb1275","provider":null,"first_name":"QA-Modificat","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+a-1792245587396@test.local","totp_enabled":false,"created_at":"2026-10-17 13:59:55","address":{"street":"Teststraat 2","house_number":null,"city":"Amsterdam","state":null,"country":"NL","postal_code":"1011 AB"},"enabled":true,"role":"user","failed_login_attempts":0},{"id":"01m552k0pjeydtzqfwz44279eb","provider":null,"first_name":"QA","last_name":"UserB","phone":"0612345678","dob":"1990-01-01","email":"qa+b-1792245587396@test.local","totp_enabled":false,"created_at":"2026-10-17 13:59:56","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"},"enabled":true,"role":"user","failed_login_attempts":0},{"id":"01m552kg5a890kvbmsptpr00b0","provider":null,"first_name":"QA","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+new-1792245612408@test.local","totp_enabled":false,"created_at":"2026-10-17 14:00:12","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"},"enabled":true,"role":"user","failed_login_attempts":0},{"id":"01m552kjkvc18nkd0f3z14bxqh","provider":null,"first_name":"QA","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa-fara-arond-1792245587396","totp_enabled":false,"created_at":"2026-10-17 14:00:15","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"},"enabled":true,"role":"user","failed_login_attempts":0},{"id":"01m552km2yakbc35a1akzkggtk","provider":null,"first_name":"QA","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+1792245616475@test.local","totp_enabled":false,"created_at":"2026-10-17 14:00:16","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"},"enabled":true,"role":"user","failed_login_attempts":0},{"id":"01m552kmhja8v5v80jbv0grpnd","provider":null,"first_name":"QA","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+ra-1792245616926@test.local","totp_enabled":false,"created_at":"2026-10-17 14:00:17","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"},"enabled":true,"role":"user","failed_login_attempts":0},{"id":"01m552kqv4mnywed6hfdfmar1f","provider":null,"first_name":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+1792245620311@test.local","totp_enabled":false,"created_at":"2026-10-17 14:00:20","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"},"enabled":true,"role":"user","failed_login_attempts":0},{"id":"01m552kr9sjx6n2z2pyr1xpj4r","provider":null,"first_name":"QA","last_name":"AAAAAAAAAAAAAAAAAAAA","phone":"0612345678","dob":"1990-01-01","email":"qa+1792245620779@test.local","totp_enabled":false,"created_at":"2026-10-17 14:00:21","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"},"enabled":true,"role":"user","failed_login_attempts":0},{"id":"01m552krr7t2y73n2fwhdam06t","provider":null,"first_name":"QA","last_name":"Tester","phone":"111111111111111111111111","dob":"1990-01-01","email":"qa+1792245621226@test.local","totp_enabled":false,"created_at":"2026-10-17 14:00:21","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"},"enabled":true,"role":"user","failed_login_attempts":0}],"from":1,"last_page":1,"per_page":15,"to":12,"total":12}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Non-empty list | 1 | 0 | 0 |
| No sensitive fields | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 91e384bc-0b52-4dfc-97ed-1559d1b0f6b2 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:29 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Forbidden"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | c3e58996-f50b-48d7-a437-12e925405291 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:29 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 810b8aa0-afa4-4284-a1ed-2a002e5f09e3 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 298 |
{
"name": "Test product 1792245587396",
"description": "Created by the API test",
"price": 9.99,
"category_id": "01M552JH0YW2D66AXDEDJGQGWD",
"brand_id": "01M552JGRRJK0308ZCZCH32JAH",
"product_image_id": "01M552JH1JNQZMARG3VDF4TG7J",
"is_location_offer": false,
"is_rental": false
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:30 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"name":"Test product 1792245587396","description":"Created by the API test","price":9.99,"is_location_offer":false,"is_rental":false,"id":"01m552nvpty53cay14v4w9m6y0","in_stock":null,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers","parent_id":"01M552JH0THC23EZ570GKVAFFH"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools","slug":"forgeflex-tools"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 84fe13c3-4aa1-49f7-92f5-338897f343f7 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 299 |
{
"name": "Test product 1792245587396",
"description": "Created by the API test",
"price": 19.99,
"category_id": "01M552JH0YW2D66AXDEDJGQGWD",
"brand_id": "01M552JGRRJK0308ZCZCH32JAH",
"product_image_id": "01M552JH1JNQZMARG3VDF4TG7J",
"is_location_offer": false,
"is_rental": false
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:31 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"success":true}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 4fb8ddd6-2458-4783-ac40-bd0b362ff71e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:01:31 GMT |
| ETag | "59c2166987908b4ece1781cd341633cf" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552nvpty53cay14v4w9m6y0","name":"Test product 1792245587396","description":"Created by the API test","price":19.99,"is_location_offer":false,"is_rental":false,"co2_rating":null,"in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers","parent_id":"01M552JH0THC23EZ570GKVAFFH"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"},"specs":[]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| New price persisted | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | b955dfa0-7e37-4e85-82b4-c70584aa566e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:31 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 204 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | eb422c0a-e070-4a70-a90a-8c78035d2228 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:32 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Requested item not found"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 404 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9271dd47-8fbf-427d-91e6-64c7cd9bf1d5 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 298 |
{
"name": "Test product 1792245587396",
"description": "Created by the API test",
"price": 9.99,
"category_id": "01M552JH0YW2D66AXDEDJGQGWD",
"brand_id": "01M552JGRRJK0308ZCZCH32JAH",
"product_image_id": "01M552JH1JNQZMARG3VDF4TG7J",
"is_location_offer": false,
"is_rental": false
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:32 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"name":"Test product 1792245587396","description":"Created by the API test","price":9.99,"is_location_offer":false,"is_rental":false,"id":"01m552ny6cbkt75hn3220xj8km","in_stock":null,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers","parent_id":"01M552JH0THC23EZ570GKVAFFH"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools","slug":"forgeflex-tools"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 69361cf6-8610-46f9-938d-4f7eed5be090 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:33 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Forbidden"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | b0dfcbdc-211d-4323-b1a2-6100ede7b862 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:01:33 GMT |
| ETag | "8190b002ceaf022f1ebbcc898b77705d" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552ny6cbkt75hn3220xj8km","name":"Test product 1792245587396","description":"Created by the API test","price":9.99,"is_location_offer":false,"is_rental":false,"co2_rating":null,"in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers","parent_id":"01M552JH0THC23EZ570GKVAFFH"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"},"specs":[]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 22b517ed-cb62-4c55-9aa9-439893d0bb51 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:33 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 204 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9f0d1a03-32ba-4d59-8da6-aaf24626fe8d |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:34 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Forbidden"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 6f18137b-ee31-46a5-af1e-036b88b327c2 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 91 |
{
"email": "qa+b-1792245587396@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:34 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 62a3fd7c-befd-4224-a77b-c6f5652314e7 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 74 |
{
"name": "Brand QA 1792245587396",
"slug": "brand-qa-1792245587396"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:35 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"name":"Brand QA 1792245587396","slug":"brand-qa-1792245587396","id":"01m552p0ktc7qp716ehvyfjtaw"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | dd5a6804-135a-4570-82fd-cd16fa2a80a9 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 80 |
{
"name": "QA Category 1792245587396",
"slug": "qa-category-1792245587396"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:35 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"name":"QA Category 1792245587396","slug":"qa-category-1792245587396","id":"01m552p0ytfgz4x5gzwqdbwbw3"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | a4b30219-7734-4607-8d1a-f3cd07fd2312 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 84 |
{
"name": "Brand QA anon-1792245587396",
"slug": "brand-qa-anon-1792245587396"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:35 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"name":"Brand QA anon-1792245587396","slug":"brand-qa-anon-1792245587396","id":"01m552p17vfxne05ngjpf40rx3"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status 401 | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 68006ae5-55e1-4d44-b2ba-8fe59cd3d45e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 84 |
{
"name": "Brand QA user-1792245587396",
"slug": "brand-qa-user-1792245587396"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:36 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"name":"Brand QA user-1792245587396","slug":"brand-qa-user-1792245587396","id":"01m552p1hvw8b0nnh8104sahax"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status 403 | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 45f3599d-fb65-4520-b371-e82a6c5b7d30 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 74 |
{
"name": "Brand QA 1792245587396",
"slug": "brand-qa-1792245587396"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:36 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"slug":["A brand already exists with this slug."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 409 | 1 | 0 | 0 |
| Validation error on slug | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 948f6a21-f60b-4cb7-bda0-6fcccd89772c |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:36 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Forbidden"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 64ed11dc-b0b6-4afa-a9c8-42baa069a277 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:37 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 204 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 65a0fe30-136f-4e1c-91dc-711d5909bf50 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:37 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 204 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | ef7f1b0f-6faa-4c48-913c-7e7362de5404 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 60 |
{ "spec_name": "Test", "spec_value": "QA", "spec_unit": "" }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:37 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | a4ecc8d8-0c1b-45db-bc07-308ce9120db7 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 60 |
{ "spec_name": "Test", "spec_value": "QA", "spec_unit": "" }
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:38 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Test","spec_value":"QA","spec_unit":null,"id":"01m552p3hxb48dvzqrd7hdhh4p"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 403] | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status in [401, 403] | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9288479a-e751-4d71-bf14-39643b751f48 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 298 |
{
"name": "Test product 1792245587396",
"description": "Created by the API test",
"price": 9.99,
"category_id": "01M552JH0YW2D66AXDEDJGQGWD",
"brand_id": "01M552JGRRJK0308ZCZCH32JAH",
"product_image_id": "01M552JH1JNQZMARG3VDF4TG7J",
"is_location_offer": false,
"is_rental": false
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:38 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"name":"Test product 1792245587396","description":"Created by the API test","price":9.99,"is_location_offer":false,"is_rental":false,"id":"01m552p3w0tn576x3a1zxnge4s","in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers","parent_id":"01M552JH0THC23EZ570GKVAFFH"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools","slug":"forgeflex-tools"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status 401 | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 26b2bd5d-e492-4301-b2ab-46bd0ec600e1 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 298 |
{
"name": "Test product 1792245587396",
"description": "Created by the API test",
"price": 9.99,
"category_id": "01M552JH0YW2D66AXDEDJGQGWD",
"brand_id": "01M552JGRRJK0308ZCZCH32JAH",
"product_image_id": "01M552JH1JNQZMARG3VDF4TG7J",
"is_location_offer": false,
"is_rental": false
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:38 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"name":"Test product 1792245587396","description":"Created by the API test","price":9.99,"is_location_offer":false,"is_rental":false,"id":"01m552p475gj4f6gjyr7js8h78","in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers","parent_id":"01M552JH0THC23EZ570GKVAFFH"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools","slug":"forgeflex-tools"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status 403 | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | c3742620-0e8f-473c-96e1-4157c68b3233 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 19 |
{
"price": 0.01
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:39 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"success":true}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status 401 | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 471249ac-844e-4fb1-8703-d940fdb45084 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 19 |
{
"price": 0.01
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:39 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"success":true}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status 403 | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 714b1c89-cccf-4bd9-a072-ecec26f4e3ee |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:01:39 GMT |
| ETag | "a809d5f7db14cce4ee3274eeae6dc222" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":0.01,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers","parent_id":"01M552JH0THC23EZ570GKVAFFH"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"},"specs":[{"id":"01M552JH6P79413ZXA0S6SD6KS","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Handle Material","spec_value":"Bi-component","spec_unit":null},{"id":"01M552JH6P79413ZXA0S6SD6KQ","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Length","spec_value":"200","spec_unit":"mm"},{"id":"01M552JH6P79413ZXA0S6SD6KR","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Material","spec_value":"Chrome Vanadium Steel","spec_unit":null},{"id":"01m552p3hxb48dvzqrd7hdhh4p","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Test","spec_value":"QA","spec_unit":null},{"id":"01M552JH6P79413ZXA0S6SD6KT","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Warranty","spec_value":"2","spec_unit":"years"},{"id":"01M552JH6P79413ZXA0S6SD6KP","product_id":"01M552JH28NG35XD8J04PGAJXN","spec_name":"Weight","spec_value":"340","spec_unit":"g"}]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Original price | 0 | 1 | 0 |
| Total | 1 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Original price | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | d2caaa3c-e12d-430c-a3e7-fd224fc108d8 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:40 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 59 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"year":2025,"total":0},{"year":2026,"total":1400.85}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Response has data | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | b43af46d-7fab-4b34-bd77-2ef066d46286 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:40 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 58 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"total_sales":"1400.85","billing_country":"NL"}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Response is an array | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 46094570-9411-4a20-9ca1-70277e0ae366 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:41 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 57 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"name":"Cordless Drill 24V","count":18},{"name":"Measuring Tape","count":18},{"name":"Mini Screwdriver","count":18},{"name":"Combination Pliers","count":18},{"name":"Protective Gloves","count":17},{"name":"Safety Goggles","count":17},{"name":"Claw Hammer with Shock Reduction Grip","count":17},{"name":"Cordless Drill 20V","count":17},{"name":"Circular Saw","count":17},{"name":"Tool Cabinet","count":16}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Response has data | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 01caf5b3-61ae-4a9f-92b8-175fd08f20d0 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:41 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 56 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"category_name":"Drill","total_earned":"5143.79"},{"category_name":"Workbench","total_earned":"4036.12"},{"category_name":"Sander","total_earned":"2956.61"},{"category_name":"Safety Gear","total_earned":"2416.35"},{"category_name":"Storage Solutions","total_earned":"2372.41"},{"category_name":"Hammer","total_earned":"1494.79"},{"category_name":"Saw","total_earned":"1363.23"},{"category_name":"Pliers","total_earned":"1347.95"},{"category_name":"Chisels","total_earned":"1075.84"},{"category_name":"Wrench","total_earned":"936.62"}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Response has data | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 6d962ae1-3c9b-4608-b10b-9c7077d70528 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:42 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 55 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"amount":1,"country":"Austria"},{"amount":1,"country":"Germany"},{"amount":9,"country":"NL"},{"amount":1,"country":"United Kingdom"}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Response has data | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 795a2e21-4e6f-4498-b56a-d83a70757f0c |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:42 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 54 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"month":1,"average":0,"amount":0},{"month":2,"average":0,"amount":0},{"month":3,"average":0,"amount":0},{"month":4,"average":0,"amount":0},{"month":5,"average":0,"amount":0},{"month":6,"average":0,"amount":0},{"month":7,"average":0,"amount":0},{"month":8,"average":0,"amount":0},{"month":9,"average":0,"amount":0},{"month":10,"average":1400.85,"amount":1},{"month":11,"average":0,"amount":0},{"month":12,"average":0,"amount":0}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Response has data | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 96afcbd3-84f1-45b6-a38d-7ff3e4b56ba8 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:43 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 53 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"week":1,"average":0,"amount":0},{"week":2,"average":0,"amount":0},{"week":3,"average":0,"amount":0},{"week":4,"average":0,"amount":0},{"week":5,"average":0,"amount":0},{"week":6,"average":0,"amount":0},{"week":7,"average":0,"amount":0},{"week":8,"average":0,"amount":0},{"week":9,"average":0,"amount":0},{"week":10,"average":0,"amount":0},{"week":11,"average":0,"amount":0},{"week":12,"average":0,"amount":0},{"week":13,"average":0,"amount":0},{"week":14,"average":0,"amount":0},{"week":15,"average":0,"amount":0},{"week":16,"average":0,"amount":0},{"week":17,"average":0,"amount":0},{"week":18,"average":0,"amount":0},{"week":19,"average":0,"amount":0},{"week":20,"average":0,"amount":0},{"week":21,"average":0,"amount":0},{"week":22,"average":0,"amount":0},{"week":23,"average":0,"amount":0},{"week":24,"average":0,"amount":0},{"week":25,"average":0,"amount":0},{"week":26,"average":0,"amount":0},{"week":27,"average":0,"amount":0},{"week":28,"average":0,"amount":0},{"week":29,"average":0,"amount":0},{"week":30,"average":0,"amount":0},{"week":31,"average":0,"amount":0},{"week":32,"average":0,"amount":0},{"week":33,"average":0,"amount":0},{"week":34,"average":0,"amount":0},{"week":35,"average":0,"amount":0},{"week":36,"average":0,"amount":0},{"week":37,"average":0,"amount":0},{"week":38,"average":0,"amount":0},{"week":39,"average":0,"amount":0},{"week":40,"average":0,"amount":0},{"week":41,"average":1400.85,"amount":1},{"week":42,"average":0,"amount":0},{"week":43,"average":0,"amount":0},{"week":44,"average":0,"amount":0},{"week":45,"average":0,"amount":0},{"week":46,"average":0,"amount":0},{"week":47,"average":0,"amount":0},{"week":48,"average":0,"amount":0},{"week":49,"average":0,"amount":0},{"week":50,"average":0,"amount":0},{"week":51,"average":0,"amount":0},{"week":52,"average":0,"amount":0}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Response has data | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 19fd6496-7dd9-4115-b835-a3982e7f8bd7 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:43 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 52 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"name":"Cordless Drill 24V","count":18},{"name":"Measuring Tape","count":18},{"name":"Mini Screwdriver","count":18},{"name":"Combination Pliers","count":18},{"name":"Protective Gloves","count":17},{"name":"Safety Goggles","count":17},{"name":"Claw Hammer with Shock Reduction Grip","count":17},{"name":"Cordless Drill 20V","count":17},{"name":"Circular Saw","count":17},{"name":"Tool Cabinet","count":16}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| At most 10 items | 1 | 0 | 0 |
| Sorted descending by count | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9d529dc5-74a0-481b-bd4f-4c2b686a1857 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:43 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 51 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"category_name":"Drill","total_earned":"5143.79"},{"category_name":"Workbench","total_earned":"4036.12"},{"category_name":"Sander","total_earned":"2956.61"},{"category_name":"Safety Gear","total_earned":"2416.35"},{"category_name":"Storage Solutions","total_earned":"2372.41"},{"category_name":"Hammer","total_earned":"1494.79"},{"category_name":"Saw","total_earned":"1363.23"},{"category_name":"Pliers","total_earned":"1347.95"},{"category_name":"Chisels","total_earned":"1075.84"},{"category_name":"Wrench","total_earned":"936.62"}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| At most 10 items | 1 | 0 | 0 |
| Sorted descending by total_earned | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 06264417-ca6d-47a8-afba-9c05b80c43b5 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:44 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 59 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Forbidden"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 2b3c507e-1947-4891-8b18-2502ab76e6ad |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:44 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 58 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Forbidden"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 8954457e-3511-4a1e-a6c7-cde2a8208a96 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:45 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 57 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Forbidden"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | d3b48495-7fe4-4a7f-a3d6-edcc28a31ea5 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:45 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 56 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Forbidden"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 936197b5-6b29-4557-82c7-c4eff1c019cf |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:46 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 55 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Forbidden"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 8ca3af5a-7b0f-4362-b14d-ddac07cc6ea0 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:46 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 54 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Forbidden"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 5d6a3278-0f4f-4310-a844-2b3e01e297bc |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:46 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 53 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Forbidden"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 403 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | ebf47734-09eb-4ada-9e2a-3eaf4e804c47 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:47 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 59 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | b0c08a8c-9c48-4f8f-954a-988cd7044b13 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:47 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 58 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 403039d1-eae2-4bfb-bc4e-d24ed57d5d82 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:47 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 57 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 2a84274f-9f37-4ef0-ab7f-743efa018648 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:48 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 56 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | cb13f8e7-9467-45e9-b8cc-5272b14c992b |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:48 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 55 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | c1cece9c-79a6-4460-b056-663b0ee3abb7 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:49 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 54 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 0628f767-ffe1-40ea-b009-15b099fffaa6 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:54 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 53 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 4996ccf5-15af-4ce3-9b6d-d0b1bc5a5826 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:54 GMT |
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 50 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
[{"year":2025,"total":0},{"year":2026,"total":1400.85}]
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [200, 429] | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 8755a855-13ff-4631-aa7a-9974e2def4ed |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 343 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+pw-1792245714846@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:56 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":"QA","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+pw-1792245714846@test.local","id":"01m552pn3s4wn6s3hacfb9709n","created_at":"2026-10-17 14:01:56","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 703679ec-8759-4627-8645-b206f6e15c8e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 93 |
{
"email": "qa+pw-1792245714846@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:57 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 7c54cc02-ca23-46ea-bbc0-9dd51f94a9dd |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 141 |
{
"current_password": "[password masked]",
"new_password": "Nou-Pass!2026x",
"new_password_confirmation": "Nou-Pass!2026x"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:57 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"success":true}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| success = true | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 21330004-bb60-41fc-9bb4-7c61b47ab4e4 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 79 |
{
"email": "qa+pw-1792245714846@test.local",
"password": "Nou-Pass!2026x"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:58 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 78ad1474-40f2-4e19-a531-710c4177d01e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 93 |
{
"email": "qa+pw-1792245714846@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:58 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No access_token in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 0533bf25-7171-4927-92f0-0591a69e890e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 343 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+fp-1792245718882@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:01:59 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":"QA","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+fp-1792245718882@test.local","id":"01m552prprkdpwghtrwzznrqyn","created_at":"2026-10-17 14:01:59","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 54030080-88e0-4280-8a8b-8b45eb068726 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 47 |
{
"email": "qa+fp-1792245718882@test.local"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:00 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"success":true}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 1385210a-b6cc-4401-bfaf-1f5b80a64d06 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 51 |
{
"email": "nu-exista-1792245587396@test.local"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:00 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The selected email is invalid.","errors":{"email":["The selected email is invalid."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| Same status as for the existing email | 0 | 1 | 0 |
| Same message as for the existing email | 0 | 1 | 0 |
| Total | 1 | 2 | 0 |
| Test Name | Assertion Error |
|---|---|
| Same status as for the existing email | |
| Same message as for the existing email | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 8577c948-bdbd-49b1-9b3f-30682cc9790a |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 343 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+lk-1792245720638@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:00 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":"QA","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+lk-1792245720638@test.local","id":"01m552pstvrzafyq8akdaawdzv","created_at":"2026-10-17 14:02:00","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 19885cbf-a270-4a03-a3c2-ea2c72f48b37 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 76 |
{
"email": "qa+lk-1792245720638@test.local",
"password": "Gresita!123"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:01 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No access_token in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 742dfeed-676a-4c4b-88bc-0ed2911c9e61 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 76 |
{
"email": "qa+lk-1792245720638@test.local",
"password": "Gresita!123"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:01 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No access_token in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9474d3f5-6ac9-4483-9546-6a672ed3fd31 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 76 |
{
"email": "qa+lk-1792245720638@test.local",
"password": "Gresita!123"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:02 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 1 | 0 | 0 |
| No access_token in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 53e592b2-661c-484b-80a4-739080e018f6 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 76 |
{
"email": "qa+lk-1792245720638@test.local",
"password": "Gresita!123"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:02 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Account locked, too many failed attempts. Please contact the administrator."}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 423 | 1 | 0 | 0 |
| No access_token in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | f5ba0813-1e31-4803-80e6-0f8f8e535520 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 93 |
{
"email": "qa+lk-1792245720638@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:02 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Account locked, too many failed attempts. Please contact the administrator."}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 423 | 1 | 0 | 0 |
| No access_token in response | 1 | 0 | 0 |
| Account locked message | 1 | 0 | 0 |
| Total | 3 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 890c0775-7f96-4127-8921-2fa678b5d3e3 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 343 |
{
"first_name": "QA",
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+tp-1792245722807@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:03 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":"QA","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+tp-1792245722807@test.local","id":"01m552pvyh5q16x7869hc009fc","created_at":"2026-10-17 14:02:03","address":{"street":"Teststraat 1","house_number":null,"city":"Amsterdam","state":"Noord-Holland","country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 201 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 13b1a359-6395-489b-a1e1-464455395223 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 93 |
{
"email": "qa+tp-1792245722807@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:03 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | a627f364-45f6-48f2-9fab-6c76c192e562 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 0 |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:03 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"secret":"Q4W4PAL4OK2ILBZE","qrCodeUrl":"otpauth:\/\/totp\/Practice%20Software%20Testing:qa%2Btp-1792245722807%40test.local?secret=Q4W4PAL4OK2ILBZE&issuer=Practice%20Software%20Testing&algorithm=SHA1&digits=6&period=30"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Secret received | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | a87af86f-751d-4421-a833-79bb1de8f69b |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 22 |
{
"totp": "251063"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:04 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"TOTP enabled successfully"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 3ee15b7f-e928-490d-b0cc-2b4ad51ee2b3 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 93 |
{
"email": "qa+tp-1792245722807@test.local",
"password": "[password masked]"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:04 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"TOTP required","requires_totp":true,"access_token":"eyJ…[masked]"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| requires_totp = true | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 6b06462c-fd4e-4061-9af5-e711900c62b3 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:05 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized token usage"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 403] | 1 | 0 | 0 |
| Total | 1 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 992197e2-b303-4320-899e-1be9bd5cd106 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 439 |
{
"access_token": "eyJ…[masked]",
"totp": "251063"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:05 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"access_token":"eyJ…[masked]","token_type":"bearer","expires_in":300}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| Full token received | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | cd620687-52e8-4f98-90b4-25a7ccc33397 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 439 |
{
"access_token": "eyJ…[masked]",
"totp": "000000"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:05 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Invalid TOTP"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [400, 401] | 1 | 0 | 0 |
| No access_token in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | a47c22e2-1d94-4cfe-bc8a-1aa99e2b0975 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 439 |
{
"access_token": "eyJ…[masked]",
"totp": "251063"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:06 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{
"message": "Method App\\Http\\Controllers\\TOTPController::loginWithTOTP does not exist.",
"exception": "BadMethodCallException",
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 68,
"trace": [
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Controller.php",
"line": 54,
"function": "__call",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
"line": 43,
"function": "callAction",
"class": "Illuminate\\Routing\\Controller",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 276,
"function": "dispatch",
"class": "Illuminate\\Routing\\ControllerDispatcher",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
"line": 216,
"function": "runController",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 822,
"function": "run",
"class": "Illuminate\\Routing\\Route",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "Illuminate\\Routing\\{closure}",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/var/www/app/Http/Middleware/AssignGuard.php",
"line": 24,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\AssignGuard",
"type": "->"
},
{
"file": "/var/www/app/Http/Middleware/Authenticate.php",
"line": 99,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\Authenticate",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 821,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 800,
"function": "runRouteWithinStack",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 764,
"function": "runRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
"line": 753,
"function": "dispatchToRoute",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 200,
"function": "dispatch",
"class": "Illuminate\\Routing\\Router",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 180,
"function": "Illuminate\\Foundation\\Http\\{closure}",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/var/www/app/Http/Middleware/PaginateMiddleware.php",
"line": 22,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "App\\Http\\Middleware\\PaginateMiddleware",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
"line": 21,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
"line": 31,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php",
"line": 27,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\ValidatePostSize",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
"line": 74,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 219,
"function": "handle",
"class": "Illuminate\\Http\\Middleware\\HandleCors",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
"line": 137,
"function": "Illuminate\\Pipeline\\{closure}",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 175,
"function": "then",
"class": "Illuminate\\Pipeline\\Pipeline",
"type": "->"
},
{
"file": "/var/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
"line": 144,
"function": "sendRequestThroughRouter",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
},
{
"file": "/var/www/public/index.php",
"line": 53,
"function": "handle",
"class": "Illuminate\\Foundation\\Http\\Kernel",
"type": "->"
}
]
}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| No server error (5xx) | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 8c1e3c4c-fc4e-4451-96fb-2ba0c49607f8 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 69 |
{
"product_id": "01M552JH28NG35XD8J04PGAJXN",
"quantity": "doi"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:06 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"The quantity field must be an integer.","errors":{"quantity":["The quantity field must be an integer."]}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| No server error (5xx) | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | de25302f-1f06-4f0a-a1b9-7a184ec9b432 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 302 |
{
"name": "Test product 1792245587396",
"description": "Created by the API test",
"price": "ieftin",
"category_id": "01M552JH0YW2D66AXDEDJGQGWD",
"brand_id": "01M552JGRRJK0308ZCZCH32JAH",
"product_image_id": "01M552JH1JNQZMARG3VDF4TG7J",
"is_location_offer": false,
"is_rental": false
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:06 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"price":["The price field must be a number."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| No server error (5xx) | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 7130558d-3d86-45d9-9e98-74a7c970df4e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 300 |
{
"name": "Test product 1792245587396",
"description": "Created by the API test",
"price": 9.99,
"category_id": "01M552JH0YW2D66AXDEDJGQGWD",
"brand_id": "01M552JGRRJK0308ZCZCH32JAH",
"product_image_id": "01M552JH1JNQZMARG3VDF4TG7J",
"is_location_offer": false,
"is_rental": "poate"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:07 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"is_rental":["The is rental field must be true or false."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| No server error (5xx) | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | fc2f500b-3755-4011-bfde-1cd729691996 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 337 |
{
"first_name": 123,
"last_name": "Tester",
"address": {
"street": "Teststraat 1",
"city": "Amsterdam",
"state": "Noord-Holland",
"country": "NL",
"postal_code": "1011 AB"
},
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+1792245727324@test.local",
"password": "Qa-Test!2026#1792245727324"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:07 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":["The first name field must be a string."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| No server error (5xx) | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | df840690-6a70-43f2-9f2d-83a1edc3265d |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 204 |
{
"first_name": "QA",
"last_name": "Tester",
"address": "text",
"phone": "0612345678",
"dob": "1990-01-01",
"email": "qa+1792245727743@test.local",
"password": "Qa-Test!2026#1792245727743"
}
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:08 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"address":["The address field must be an array."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 422 | 1 | 0 | 0 |
| No server error (5xx) | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 3f7043bd-4bd5-4029-a534-3513875ac947 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 10 |
{"email":
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:08 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Invalid login request"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [400, 401, 422] | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | dc67da6d-3d83-4dc7-a605-38edd6b89b6d |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 9 |
nu e json
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:08 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"first_name":["The first name field is required."],"last_name":["The last name field is required."],"email":["The email field is required."],"password":["The password field is required."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [400, 401, 422] | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | ec6c2d85-607a-4529-9025-f8a60396535f |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 12 |
{"cart_id":
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:09 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"payment_method":["The payment method field is required."],"payment_details":["The payment details field must be present."],"billing_street":["The billing street field is required."],"billing_city":["The billing city field is required."],"billing_country":["The billing country field is required."],"cart_id":["The cart id field is required."]}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [400, 401, 422] | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9b31108b-82bf-45f4-bec1-195cbf06f340 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:02:09 GMT |
| ETag | "10d3661b9d56e0941ffcccc7da778944" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":0.01,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2AG9122BMKVRF3XH0Z","name":"Pliers","description":"Reliable general-purpose pliers crafted from drop-forged carbon steel for long-lasting durability in demanding working conditions. The serrated jaws provide a firm grip on a variety of materials including wire, nails, small fasteners, and irregularly shaped objects. Comfortable rubber-coated handles absorb vibration and reduce hand fatigue during extended use, while the non-slip surface ensures confident handling. The precision pivot joint maintains alignment under load, delivering smooth, controlled jaw action with every squeeze. Heat-treated steel construction resists wear and deformation even under heavy use. A must-have foundational tool for any workshop, equally suited for professional tradespeople and home repair projects.","price":12.01,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7K","by_name":"Everyday basics","by_url":"https:\/\/unsplash.com\/@zanardi","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/I8eTuMmxIfo","file_name":"pliers02.avif","title":"Pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2BGG1K6K9GEJTT8GEQ","name":"Bolt Cutters","description":"Heavy-duty bolt cutters engineered to slice through hardened bolts, chains, padlocks, and wire fencing with minimal effort. The compound leverage mechanism multiplies your cutting force by a factor of 30, enabling clean cuts through materials up to 10mm in diameter. Hardened alloy steel blades are precisely ground and heat-treated to maintain a sharp edge through years of repeated use on tough materials. Ergonomic rubber grips and the generous 750mm handle length provide excellent control, leverage, and reach during overhead or awkward-angle cuts. An adjustable blade tension screw lets you fine-tune the jaw alignment for optimal cutting performance. Built for demolition crews, locksmiths, fencing contractors, and maintenance professionals who need reliable cutting power day after day.","price":48.41,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7M","by_name":"Michael Dziedzic","by_url":"https:\/\/unsplash.com\/@lazycreekimages","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/pM9pkc9J918","file_name":"pliers03.avif","title":"Bolt cutters"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2DQD17DR3ERTSE1Z2M","name":"Long Nose Pliers","description":"Precision long nose pliers with narrow tapered jaws designed for reaching into tight, confined spaces and bending fine wire with accuracy. Made from chrome vanadium steel with induction-hardened cutting edges that cleanly sever copper, brass, and steel wire without crushing or fraying. The slim jaw profile tapers to a fine point, making these pliers indispensable for electrical terminal work, jewelry making, and intricate mechanical repairs. Bi-component comfort grips minimize hand strain during detailed tasks requiring a steady hand and controlled pressure. The leaf-spring joint returns the handles to the open position automatically, speeding up repetitive tasks. A must-have precision tool trusted by electricians, electronics technicians, and hobbyists worldwide.","price":14.24,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7N","by_name":"Brett Jordan","by_url":"https:\/\/unsplash.com\/@brett_jordan","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/GamuDTVm02g","file_name":"pliers04.avif","title":"Long nose pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2EXDQ749444RB4RAMH","name":"Slip Joint Pliers","description":"Adjustable slip joint pliers that feature a two-position pivot mechanism for switching between regular and wide jaw openings to accommodate different fastener sizes. The PVC-coated handles offer a comfortable, non-slip grip while the precisely machined jaws securely grasp round, flat, and hexagonal objects without slipping. Constructed from durable drop-forged carbon steel that has been heat-treated to withstand heavy daily use in professional environments. The curved jaw section grips pipes and cylindrical objects, while the flat front surface handles nuts, bolts, and sheet materials. A wire cutter integrated near the pivot handles light cutting tasks without reaching for a separate tool. Perfect for plumbing, automotive, HVAC, and general maintenance work where a single versatile gripping tool saves time.","price":9.17,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7P","by_name":"Yasin Hasan","by_url":"https:\/\/unsplash.com\/@yasin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/dwlxTSpfKXg","file_name":"pliers05.avif","title":"Slip joint pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2F4ZF8Y8F7T1EBMA3H","name":"Claw Hammer with Shock Reduction Grip","description":"Ergonomic claw hammer featuring an advanced shock reduction grip system that absorbs up to 70% of impact vibrations, protecting your wrist, elbow, and shoulder during prolonged nailing sessions. The 450g carbon steel head is precision-balanced and heat-treated for maximum hardness, ensuring accurate nail driving with minimal effort on every swing. The curved claw design effortlessly removes nails without damaging surrounding wood surfaces, making it equally useful for construction and renovation work. A fiberglass-reinforced handle combines lightweight strength with exceptional durability that far outlasts traditional wooden handles. The overmolded soft-grip zone conforms to your hand shape for a custom-feeling, fatigue-free hold throughout long working days. Recommended for professional framing, carpentry, and renovation projects where operator comfort matters as much as striking performance.","price":13.41,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7Q","by_name":"iMattSmart","by_url":"https:\/\/unsplash.com\/@imattsmart","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/jaLaLQdkBOE","file_name":"hammer01.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2GD6Q6AVJJSHVS7GKD","name":"Hammer","description":"A dependable standard claw hammer suitable for driving and removing nails in everyday construction, carpentry, and home improvement projects. The 350g carbon steel head is drop-forged and heat-treated for maximum hardness, then fitted to a traditional wooden handle that provides natural shock absorption with each strike. Well-balanced weight distribution between the head and handle ensures accurate strikes with minimal wrist effort, reducing fatigue during repetitive nailing tasks. The polished face resists rust and provides a smooth surface that drives nails cleanly without leaving marks on finish materials. A gently curved claw provides reliable nail extraction leverage without excessive force. This versatile hammer belongs in every toolbox, from professional carpentry workshops to home garages and apartment maintenance kits.","price":12.58,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7R","by_name":"Jozsef Hocza","by_url":"https:\/\/unsplash.com\/@hocza","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/D3nouOYbALc","file_name":"hammer02.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2JAZV07V79R70NNDNX","name":"Claw Hammer","description":"Traditional claw hammer with a polished carbon steel head engineered for driving and removing nails with precision and confidence. The rubber-wrapped handle provides a secure, comfortable grip even in wet, dusty, or cold conditions where bare metal or wood handles would slip. At 500g, it offers the ideal balance between striking power and maneuverability for general carpentry, framing, and construction tasks. The curved claw design allows for smooth nail extraction without gouging or marring wood surfaces, protecting your finished work. The head-to-handle connection uses an epoxy-bonded wedge system that prevents loosening over time. A reliable, no-nonsense tool that professional carpenters and weekend builders alike reach for every day.","price":11.48,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7S","by_name":"Andrew George","by_url":"https:\/\/unsplash.com\/@andrewjoegeorge","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/YU2mCvXR0wA","file_name":"hammer03.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2K9QV3KQSQ6ZBBD61D","name":"Thor Hammer","description":"The legendary Thor Hammer combines premium craftsmanship with raw striking power in a tool that is truly built to last generations. Forged from Uru metal with a hand-wrapped leather grip, this extraordinary 5kg masterpiece delivers unmatched impact force for the most demanding demolition, forging, and heavy construction tasks. The perfectly balanced oversized head ensures every swing transfers maximum energy to the target, while the enlarged striking face covers more surface area than any conventional hammer. Despite its impressive mass, the ergonomic handle design and precise weight distribution allow for surprisingly controlled, accurate swings. This is not merely a tool but a statement piece for those who accept nothing less than the absolute best in their workshop. Comes with a lifetime warranty because true legends never fade. Please note: only one Thor Hammer is permitted per customer.","price":11.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7T","by_name":"ANIRUDH","by_url":"https:\/\/unsplash.com\/@lanirudhreddy","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/3esjG-nlgyk","file_name":"hammer04.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}],"from":1,"last_page":6,"per_page":9,"to":9,"total":52}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 88a69ee1-8df5-49c7-b6da-e5398e4aebb7 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:02:09 GMT |
| ETag | "10d3661b9d56e0941ffcccc7da778944" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":0.01,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2AG9122BMKVRF3XH0Z","name":"Pliers","description":"Reliable general-purpose pliers crafted from drop-forged carbon steel for long-lasting durability in demanding working conditions. The serrated jaws provide a firm grip on a variety of materials including wire, nails, small fasteners, and irregularly shaped objects. Comfortable rubber-coated handles absorb vibration and reduce hand fatigue during extended use, while the non-slip surface ensures confident handling. The precision pivot joint maintains alignment under load, delivering smooth, controlled jaw action with every squeeze. Heat-treated steel construction resists wear and deformation even under heavy use. A must-have foundational tool for any workshop, equally suited for professional tradespeople and home repair projects.","price":12.01,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7K","by_name":"Everyday basics","by_url":"https:\/\/unsplash.com\/@zanardi","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/I8eTuMmxIfo","file_name":"pliers02.avif","title":"Pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2BGG1K6K9GEJTT8GEQ","name":"Bolt Cutters","description":"Heavy-duty bolt cutters engineered to slice through hardened bolts, chains, padlocks, and wire fencing with minimal effort. The compound leverage mechanism multiplies your cutting force by a factor of 30, enabling clean cuts through materials up to 10mm in diameter. Hardened alloy steel blades are precisely ground and heat-treated to maintain a sharp edge through years of repeated use on tough materials. Ergonomic rubber grips and the generous 750mm handle length provide excellent control, leverage, and reach during overhead or awkward-angle cuts. An adjustable blade tension screw lets you fine-tune the jaw alignment for optimal cutting performance. Built for demolition crews, locksmiths, fencing contractors, and maintenance professionals who need reliable cutting power day after day.","price":48.41,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7M","by_name":"Michael Dziedzic","by_url":"https:\/\/unsplash.com\/@lazycreekimages","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/pM9pkc9J918","file_name":"pliers03.avif","title":"Bolt cutters"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2DQD17DR3ERTSE1Z2M","name":"Long Nose Pliers","description":"Precision long nose pliers with narrow tapered jaws designed for reaching into tight, confined spaces and bending fine wire with accuracy. Made from chrome vanadium steel with induction-hardened cutting edges that cleanly sever copper, brass, and steel wire without crushing or fraying. The slim jaw profile tapers to a fine point, making these pliers indispensable for electrical terminal work, jewelry making, and intricate mechanical repairs. Bi-component comfort grips minimize hand strain during detailed tasks requiring a steady hand and controlled pressure. The leaf-spring joint returns the handles to the open position automatically, speeding up repetitive tasks. A must-have precision tool trusted by electricians, electronics technicians, and hobbyists worldwide.","price":14.24,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":false,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7N","by_name":"Brett Jordan","by_url":"https:\/\/unsplash.com\/@brett_jordan","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/GamuDTVm02g","file_name":"pliers04.avif","title":"Long nose pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2EXDQ749444RB4RAMH","name":"Slip Joint Pliers","description":"Adjustable slip joint pliers that feature a two-position pivot mechanism for switching between regular and wide jaw openings to accommodate different fastener sizes. The PVC-coated handles offer a comfortable, non-slip grip while the precisely machined jaws securely grasp round, flat, and hexagonal objects without slipping. Constructed from durable drop-forged carbon steel that has been heat-treated to withstand heavy daily use in professional environments. The curved jaw section grips pipes and cylindrical objects, while the flat front surface handles nuts, bolts, and sheet materials. A wire cutter integrated near the pivot handles light cutting tasks without reaching for a separate tool. Perfect for plumbing, automotive, HVAC, and general maintenance work where a single versatile gripping tool saves time.","price":9.17,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7P","by_name":"Yasin Hasan","by_url":"https:\/\/unsplash.com\/@yasin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/dwlxTSpfKXg","file_name":"pliers05.avif","title":"Slip joint pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2F4ZF8Y8F7T1EBMA3H","name":"Claw Hammer with Shock Reduction Grip","description":"Ergonomic claw hammer featuring an advanced shock reduction grip system that absorbs up to 70% of impact vibrations, protecting your wrist, elbow, and shoulder during prolonged nailing sessions. The 450g carbon steel head is precision-balanced and heat-treated for maximum hardness, ensuring accurate nail driving with minimal effort on every swing. The curved claw design effortlessly removes nails without damaging surrounding wood surfaces, making it equally useful for construction and renovation work. A fiberglass-reinforced handle combines lightweight strength with exceptional durability that far outlasts traditional wooden handles. The overmolded soft-grip zone conforms to your hand shape for a custom-feeling, fatigue-free hold throughout long working days. Recommended for professional framing, carpentry, and renovation projects where operator comfort matters as much as striking performance.","price":13.41,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7Q","by_name":"iMattSmart","by_url":"https:\/\/unsplash.com\/@imattsmart","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/jaLaLQdkBOE","file_name":"hammer01.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2GD6Q6AVJJSHVS7GKD","name":"Hammer","description":"A dependable standard claw hammer suitable for driving and removing nails in everyday construction, carpentry, and home improvement projects. The 350g carbon steel head is drop-forged and heat-treated for maximum hardness, then fitted to a traditional wooden handle that provides natural shock absorption with each strike. Well-balanced weight distribution between the head and handle ensures accurate strikes with minimal wrist effort, reducing fatigue during repetitive nailing tasks. The polished face resists rust and provides a smooth surface that drives nails cleanly without leaving marks on finish materials. A gently curved claw provides reliable nail extraction leverage without excessive force. This versatile hammer belongs in every toolbox, from professional carpentry workshops to home garages and apartment maintenance kits.","price":12.58,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7R","by_name":"Jozsef Hocza","by_url":"https:\/\/unsplash.com\/@hocza","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/D3nouOYbALc","file_name":"hammer02.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2JAZV07V79R70NNDNX","name":"Claw Hammer","description":"Traditional claw hammer with a polished carbon steel head engineered for driving and removing nails with precision and confidence. The rubber-wrapped handle provides a secure, comfortable grip even in wet, dusty, or cold conditions where bare metal or wood handles would slip. At 500g, it offers the ideal balance between striking power and maneuverability for general carpentry, framing, and construction tasks. The curved claw design allows for smooth nail extraction without gouging or marring wood surfaces, protecting your finished work. The head-to-handle connection uses an epoxy-bonded wedge system that prevents loosening over time. A reliable, no-nonsense tool that professional carpenters and weekend builders alike reach for every day.","price":11.48,"is_location_offer":true,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7S","by_name":"Andrew George","by_url":"https:\/\/unsplash.com\/@andrewjoegeorge","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/YU2mCvXR0wA","file_name":"hammer03.avif","title":"Claw Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH2K9QV3KQSQ6ZBBD61D","name":"Thor Hammer","description":"The legendary Thor Hammer combines premium craftsmanship with raw striking power in a tool that is truly built to last generations. Forged from Uru metal with a hand-wrapped leather grip, this extraordinary 5kg masterpiece delivers unmatched impact force for the most demanding demolition, forging, and heavy construction tasks. The perfectly balanced oversized head ensures every swing transfers maximum energy to the target, while the enlarged striking face covers more surface area than any conventional hammer. Despite its impressive mass, the ergonomic handle design and precise weight distribution allow for surprisingly controlled, accurate swings. This is not merely a tool but a statement piece for those who accept nothing less than the absolute best in their workshop. Comes with a lifetime warranty because true legends never fade. Please note: only one Thor Hammer is permitted per customer.","price":11.14,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7T","by_name":"ANIRUDH","by_url":"https:\/\/unsplash.com\/@lanirudhreddy","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/3esjG-nlgyk","file_name":"hammer04.avif","title":"Hammer"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGW9","name":"Hammer","slug":"hammer"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}],"from":1,"last_page":6,"per_page":9,"to":9,"total":52}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 4e38c89d-73e0-4462-9248-945022c899c3 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:02:10 GMT |
| ETag | "8aa41256104b6c16e763760d309bafd4" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":99999,"data":[],"from":null,"last_page":6,"per_page":9,"to":null,"total":52}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 90faa6ac-077d-43c7-b9af-20972c386ec5 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:10 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Something went wrong"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 0 | 1 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 1 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| No server error (5xx) | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 08f0c1cb-3340-41c6-bf9c-ffb8de9435ac |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | max-age=120, public |
| Date | Sat, 17 Oct 2026 14:02:10 GMT |
| ETag | "0d6c44639dfde443a31737846b8072d8" |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"current_page":1,"data":[{"id":"01M552JH28NG35XD8J04PGAJXN","name":"Combination Pliers","description":"Versatile combination pliers designed for gripping, bending, and cutting wire with ease. Featuring chrome vanadium steel construction with induction-hardened cutting edges, these pliers deliver excellent grip and leverage for a wide range of tasks. The precision-machined jaws combine flat gripping surfaces with a pipe-grip section and integrated wire cutter for true multi-purpose functionality. Ergonomic bi-component handles reduce hand fatigue during extended use and provide a secure hold even with oily or gloved hands. The joint is precisely fitted to eliminate play and ensure smooth operation over thousands of cycles. Ideal for electricians, mechanics, and DIY enthusiasts tackling everyday projects around the workshop or job site.","price":0.01,"is_location_offer":false,"is_rental":false,"co2_rating":"D","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG7J","by_name":"Helinton Fantin","by_url":"https:\/\/unsplash.com\/@fantin","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/W8BNwvOvW4M","file_name":"pliers01.avif","title":"Combination pliers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWD","name":"Pliers","slug":"pliers"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3N299RA449M1GN9TP9","name":"Washers","description":"Assorted pack of 150 zinc-plated steel flat washers in popular metric sizes ranging from M4 to M10, covering the most commonly needed sizes for workshop, garage, and job site fastener work. These washers distribute the clamping force of bolts and nuts over a larger surface area, preventing damage to soft materials like wood, plastic, and painted or powder-coated metal surfaces. The smooth, burr-free finish on both faces ensures a flat, stable seating surface that maximizes friction and prevents fastener loosening under vibration. Each washer is stamped from precision-rolled steel strip to consistent thickness tolerances, ensuring predictable bolt stretch and joint behavior across multiple fastening points. The zinc plating provides reliable corrosion protection for indoor use and sheltered outdoor applications. An indispensable consumable for any workshop, garage, or maintenance department handling regular fastener assembly and repair work.","price":3.55,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG90","by_name":"Robert Ruggiero","by_url":"https:\/\/unsplash.com\/@robert2301","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/a-pile-of-different-colored-washers-sitting-on-top-of-a-table-oY6774he6GQ","file_name":"fasteners06.avif","title":"Washers"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWR","name":"Fasteners","slug":"fasteners"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3JEY7M0EX8ARR7W163","name":"Flat-Head Wood Screws","description":"Pack of 75 countersink flat-head wood screws in 4x40mm size, crafted from yellow zinc-plated steel for enhanced moisture resistance in both interior and sheltered exterior woodworking applications. The 82-degree countersink flat head sits perfectly flush with the timber surface for a clean, professional finish that can be painted, stained, or filled invisibly. Deep single-lead threads are designed to bite aggressively into both hardwood and softwood fibers for superior holding power that resists pull-out under load and vibration. The sharp gimlet point self-starts without pre-drilling in most softwoods, while a pilot hole is recommended for hardwoods to prevent splitting near edges. The yellow zinc coating provides a warm color that blends naturally with light-colored timbers. Perfect for furniture assembly, deck building, cabinet construction, and general woodworking joinery where appearance matters.","price":3.95,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8Y","by_name":"Ben Lodge","by_url":"https:\/\/unsplash.com\/@benlodge123","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/stainless-steel-11-screw-e3Y7qB67aow","file_name":"fasteners04.avif","title":"Flat-Head Wood Screws"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWR","name":"Fasteners","slug":"fasteners"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3M975R6GFDETHAGPMH","name":"M4 Nuts","description":"Box of 100 M4 hexagonal nuts manufactured from A2-grade austenitic stainless steel for excellent resistance to rust, tarnishing, and corrosion in demanding indoor and outdoor environments. The precisely machined internal threads ensure smooth, easy engagement with M4 bolts, machine screws, and threaded rod without cross-threading or binding. The standard DIN 934 hex profile is compatible with 7mm sockets, open-end spanners, and adjustable wrenches for convenient tightening with any common hand or power tool. Chamfered edges on both faces allow the nut to start on the bolt thread from either direction, saving time during repetitive assembly operations. Consistent dimensional accuracy across all 100 pieces means reliable torque values and clamping forces in every joint. Essential workshop consumables for assembly, prototyping, equipment repair, and maintenance projects across mechanical, electrical, and general engineering trades.","price":4.65,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8Z","by_name":"Mika Baumeister","by_url":"https:\/\/unsplash.com\/@kommumikation","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/silver-and-black-round-coins-c71yQepDEjo","file_name":"fasteners05.avif","title":"M4 Nuts"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWR","name":"Fasteners","slug":"fasteners"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH2X1B4SZQRX6712VYYF","name":"Phillips Screwdriver","description":"Professional-quality Phillips screwdriver with a PH2 tip precision-machined from chrome vanadium steel and vapor-blasted for maximum grip inside cross-head screw recesses. The bi-component handle features a soft-grip comfort zone that absorbs torque reaction and vibration, combined with a hard polypropylene core that transmits maximum turning force to the blade. A hex bolster machined into the shaft just above the handle allows a wrench to be applied for additional turning leverage on stubborn or over-tightened screws. The round blade shaft is chrome-plated for corrosion resistance and easy cleaning after use in greasy or painted environments. A hanging hole in the handle allows convenient pegboard or hook storage for quick identification and access. Suitable for electricians, cabinet makers, assembly technicians, and anyone who needs a reliable, comfortable everyday screwdriver.","price":4.92,"is_location_offer":true,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG82","by_name":"Tekton","by_url":"https:\/\/unsplash.com\/@tekton_tools","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/jlY6nV_STIw","file_name":"screwdriver01.avif","title":"Phillips Screwdriver"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWC","name":"Screwdriver","slug":"screwdriver"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3GSWXWW1S5BXERHWR7","name":"Nuts and bolts","description":"Comprehensive assorted set of 200 stainless steel nuts and bolts in popular metric sizes ranging from M3 to M10, providing a one-stop selection for repair, assembly, prototyping, and maintenance tasks across all trades. The 18-8 austenitic stainless steel composition delivers excellent corrosion resistance for both indoor and outdoor applications, including marine, food-processing, and chemical environments where carbon steel would quickly deteriorate. Hex bolt heads and matching hex nuts are manufactured to DIN standard tolerances for a precise, wobble-free thread engagement that inspires confidence in critical fastened joints. The set includes matching flat washers and spring washers for each size to ensure proper load distribution and vibration resistance. Supplied in a compartmentalized clear plastic case with labeled dividers for instant size identification and organized storage. An invaluable workshop consumable that eliminates trips to the hardware store for common fastener sizes.","price":5.55,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8W","by_name":"Edge2Edge Media","by_url":"https:\/\/unsplash.com\/@edge2edgemedia","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/silver-and-black-metal-tools-qHhJkxare7A","file_name":"fasteners02.avif","title":"Nuts and bolts"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWR","name":"Fasteners","slug":"fasteners"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3FF6W79ERQ60WRKT1W","name":"Screws","description":"Box of 100 general-purpose pan head machine screws in M5x30mm size, manufactured from zinc-plated mild steel for reliable corrosion resistance in indoor and sheltered outdoor applications. The Phillips drive recess is precisely formed to provide a secure, positive engagement with the screwdriver tip, significantly reducing the cam-out that damages both screws and tools. The pan head profile sits above the surface of the material, providing a clean, finished appearance and a bearing surface that distributes clamping force over a wider area than flat-head alternatives. Machine-threaded shanks ensure consistent, repeatable clamping force across all fastened joints and allow for easy removal and reinstallation during maintenance. Compatible with M5 hex nuts, nylon lock nuts, and threaded inserts. Suitable for joining sheet metal, machine assembly, wood-to-metal connections, and general workshop fabrication tasks.","price":6.25,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8V","by_name":"Eliza Diamond","by_url":"https:\/\/unsplash.com\/@eliza28diamonds","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/gray-screw-bolt-lot-pvm5QvjFrJ8","file_name":"fasteners01.avif","title":"Screws"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWR","name":"Fasteners","slug":"fasteners"},"brand":{"id":"01M552JGRS3QMESHAQ8PRPA5QJ","name":"MightyCraft Hardware"}},{"id":"01M552JH33P80E9W13627MRRWQ","name":"Tape Measure 7.5m","description":"Professional-grade 7.5-meter retractable tape measure built for daily use on construction sites, in workshops, and on renovation projects. The 25mm wide nylon-coated steel blade resists bending, kinking, and snapping at full extension, while the coating protects against abrasion and moisture that would corrode an unprotected blade. An impressive standout of over 3 meters allows solo measurements across door openings, window frames, and room widths without the blade folding. The heavy-duty rubber-armored housing absorbs drops from ladder height onto concrete floors, while the integrated belt clip and wrist lanyard keep the tape always within reach. A smooth, controllable retraction mechanism and positive blade lock hold your measurement securely in place. Dual metric and imperial markings printed in high-contrast colors ensure compatibility with any project specification and easy reading in all lighting conditions.","price":7.23,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8J","by_name":"Brett Jordan","by_url":"https:\/\/unsplash.com\/@brett_jordan","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/blue-and-yellow-measuring-tape-faOPbPmznfQ","file_name":"measure01.avif","title":"Tape Measure 7.5m"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWF","name":"Measures","slug":"measures"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}},{"id":"01M552JH3HXX14K5SQ8CDQEXNG","name":"Cross-head screws","description":"Pack of 50 Phillips cross-head screws in M4x25mm size, manufactured from zinc-plated steel for dependable corrosion protection in indoor and semi-exposed environments. The cross-head drive pattern ensures efficient power transfer from both manual and powered screwdrivers, while the precisely formed recess depth minimizes cam-out and reduces the risk of damaging the screw head or work surface. A sharp, self-starting thread point eliminates the need for pre-drilling in softwood, MDF, and chipboard applications, speeding up assembly time considerably. The 25mm thread length provides strong pull-out resistance in materials 15mm thick and above. Ideal for fastening light-gauge metal brackets, cabinet hinges, electrical outlet boxes, and general hardware. Each screw is individually inspected to ensure consistent head formation and thread quality across the entire pack.","price":7.99,"is_location_offer":false,"is_rental":false,"co2_rating":"C","in_stock":true,"is_eco_friendly":false,"product_image":{"id":"01M552JH1JNQZMARG3VDF4TG8X","by_name":"Milad Fallah","by_url":"https:\/\/unsplash.com\/@miladfallah90","source_name":"Unsplash","source_url":"https:\/\/unsplash.com\/photos\/silver-screw-lot-on-brown-wooden-table-wwZYL4BYFto","file_name":"fasteners03.avif","title":"Cross-head screws"},"category":{"id":"01M552JH0YW2D66AXDEDJGQGWR","name":"Fasteners","slug":"fasteners"},"brand":{"id":"01M552JGRRJK0308ZCZCH32JAH","name":"ForgeFlex Tools"}}],"from":1,"last_page":2,"per_page":9,"to":9,"total":12}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No server error (5xx) | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 9a6daf97-fa87-433d-a623-33e2867455c2 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:11 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Method is not allowed for the requested route"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [404, 405] | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 1691448d-e772-4af0-a267-093b1873fd4a |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 0 |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:11 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Unauthorized"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [401, 403, 404, 405] | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 78539aa0-8cd2-4308-aa71-571906bb32c2 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 0 |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:11 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Method is not allowed for the requested route"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status in [404, 405] | 1 | 0 | 0 |
| No internal details in response | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 2162470b-8509-4181-a16b-e04b732ace20 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:12 GMT |
| Allow | GET, POST, QUERY |
| Vary | Access-Control-Request-Method |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 204 | 1 | 0 | 0 |
| Allow contains GET, POST, QUERY | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 5648f930-8f01-4964-9232-ca544dcd52c8 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:12 GMT |
| Allow | DELETE, GET, POST |
| Vary | Access-Control-Request-Method |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 204 | 1 | 0 | 0 |
| Allow contains DELETE, GET, POST | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 5cb7cd05-7637-4ebf-9885-d0f3045a7851 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:12 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Requested item not found"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No internal details in response | 1 | 0 | 0 |
| No trace or exception in JSON | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 2a4a0340-c4ef-42f3-8c78-4dd55484634c |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:13 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"message":"Resource not found"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No internal details in response | 1 | 0 | 0 |
| No trace or exception in JSON | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Content-Type | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | d26d7513-c347-418b-bdeb-0b48e2421f56 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 10 |
{"email":
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:13 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"error":"Invalid login request"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| No internal details in response | 1 | 0 | 0 |
| No trace or exception in JSON | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| Authorization | Bearer …[masked] |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 6a92f2e8-2385-46eb-bea9-9fb63181598e |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:13 GMT |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"id":"01m552jz1by17vr3sx9zcb1275","provider":null,"first_name":"QA-Modificat","last_name":"Tester","phone":"0612345678","dob":"1990-01-01","email":"qa+a-1792245587396@test.local","totp_enabled":false,"created_at":"2026-10-17 13:59:55","address":{"street":"Teststraat 2","house_number":null,"city":"Amsterdam","state":null,"country":"NL","postal_code":"1011 AB"}}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 401 | 0 | 1 | 0 |
| Token had actually expired at request time | 0 | 1 | 0 |
| Total | 0 | 2 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status 401 | |
| Token had actually expired at request time | |
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 70c88135-54b5-4d07-ae71-1de4cc7e3a48 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 0 |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:22 GMT |
| X-RateLimit-Limit | 1 |
| X-RateLimit-Remaining | 1 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"refresh done"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 200 | 1 | 0 | 0 |
| refresh done | 1 | 0 | 0 |
| Total | 2 | 0 | 0 |
| Test Name | Assertion Error |
|---|
| Header Name | Header Value |
|---|---|
| Accept | application/json |
| User-Agent | PostmanRuntime/7.39.1 |
| Cache-Control | no-cache |
| Postman-Token | 39566fd9-e389-4c02-8c20-87e9ab681674 |
| Host | localhost:8091 |
| Accept-Encoding | gzip, deflate, br |
| Connection | keep-alive |
| Content-Length | 0 |
| Header Name | Header Value |
|---|---|
| Server | nginx |
| Content-Type | application/json |
| Transfer-Encoding | chunked |
| Connection | keep-alive |
| Cache-Control | no-cache, private |
| Date | Sat, 17 Oct 2026 14:02:27 GMT |
| X-RateLimit-Limit | 1 |
| X-RateLimit-Remaining | 1 |
| Access-Control-Allow-Origin | * |
| Access-Control-Expose-Headers | Content-Disposition |
{"result":"refresh done"}
| Name | Passed | Failed | Skipped |
|---|---|---|---|
| Status 429 | 0 | 1 | 0 |
| Total | 0 | 1 | 0 |
| Test Name | Assertion Error |
|---|---|
| Status 429 | |