{
  "openapi": "3.1.0",
  "info": {
    "title": "SIB SCI Inventory and Deal Enquiries",
    "version": "1.1.0",
    "description": "Public inventory and authorized enquiry intake. Prices and availability require confirmation. No purchases or binding commitments."
  },
  "servers": [
    {
      "url": "https://sibsci.com"
    }
  ],
  "paths": {
    "/api/v1/inventory": {
      "get": {
        "operationId": "searchInventory",
        "summary": "Read inventory listings",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Matching items with snapshot asking prices",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/enquiries": {
      "post": {
        "operationId": "createEnquiry",
        "summary": "Create an authorized enquiry and notify the team",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "email",
                  "requirements",
                  "consent",
                  "idempotency_key"
                ],
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string",
                    "format": "email"
                  },
                  "company": {
                    "type": "string"
                  },
                  "instrument_ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 10
                  },
                  "requirements": {
                    "type": "string",
                    "maxLength": 6000
                  },
                  "destination": {
                    "type": "string"
                  },
                  "timeframe": {
                    "type": "string"
                  },
                  "budget": {
                    "type": "string"
                  },
                  "consent": {
                    "type": "boolean",
                    "const": true
                  },
                  "idempotency_key": {
                    "type": "string",
                    "minLength": 16,
                    "maxLength": 100
                  },
                  "intent": {
                    "type": "string",
                    "enum": [
                      "buy",
                      "sell"
                    ],
                    "default": "buy",
                    "description": "Buy equipment from SIB SCI or sell equipment to SIB SCI."
                  },
                  "expected_photos": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 20,
                    "default": 0,
                    "description": "Optional count of photos the seller intends to upload."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Deal ID and private access token; keep the token confidential",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency key conflict",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit; retry after the indicated interval",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/deals/{deal_id}": {
      "parameters": [
        {
          "name": "deal_id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "operationId": "getDeal",
        "summary": "Read one private deal",
        "security": [
          {
            "dealToken": []
          }
        ],
        "responses": {
          "200": {
            "description": "Deal and conversation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Invalid token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/deals/{deal_id}/messages": {
      "parameters": [
        {
          "name": "deal_id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "operationId": "addDealMessage",
        "summary": "Append a buyer-authorized follow-up and notify the team",
        "security": [
          {
            "dealToken": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "message"
                ],
                "properties": {
                  "message": {
                    "type": "string",
                    "maxLength": 6000
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Follow-up recorded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "Invalid token",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/deals/{deal_id}/photos": {
      "get": {
        "operationId": "listEquipmentPhotos",
        "summary": "List this selling enquiry\u2019s private photo metadata",
        "security": [
          {
            "dealToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "deal_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Private deal token required"
          },
          "403": {
            "description": "Upload requires a selling enquiry"
          },
          "409": {
            "description": "Resume position conflict or incomplete file"
          },
          "413": {
            "description": "Size or count limit exceeded"
          },
          "422": {
            "description": "Invalid image or failed checksum"
          },
          "429": {
            "description": "Request limit; retry later"
          }
        }
      },
      "post": {
        "operationId": "startEquipmentPhoto",
        "summary": "Start or resume a photo by SHA-256. Max 20 photos, 25 MiB each, 250 MiB total.",
        "security": [
          {
            "dealToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "deal_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Private deal token required"
          },
          "403": {
            "description": "Upload requires a selling enquiry"
          },
          "409": {
            "description": "Resume position conflict or incomplete file"
          },
          "413": {
            "description": "Size or count limit exceeded"
          },
          "422": {
            "description": "Invalid image or failed checksum"
          },
          "429": {
            "description": "Request limit; retry later"
          },
          "201": {
            "description": "Photo reference and received_bytes offset; same file hash resumes its existing upload"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "size",
                  "sha256"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 220
                  },
                  "size": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 26214400
                  },
                  "sha256": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/deals/{deal_id}/photos/{photo_id}": {
      "get": {
        "operationId": "getEquipmentPhotoProgress",
        "summary": "Read status and the next byte offset to upload",
        "security": [
          {
            "dealToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "deal_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "photo_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Private deal token required"
          },
          "403": {
            "description": "Upload requires a selling enquiry"
          },
          "409": {
            "description": "Resume position conflict or incomplete file"
          },
          "413": {
            "description": "Size or count limit exceeded"
          },
          "422": {
            "description": "Invalid image or failed checksum"
          },
          "429": {
            "description": "Request limit; retry later"
          }
        }
      }
    },
    "/api/v1/deals/{deal_id}/photos/{photo_id}/chunks": {
      "post": {
        "operationId": "uploadEquipmentPhotoChunk",
        "summary": "Send up to 1 MiB of original bytes at offset. Identical retries are safe.",
        "security": [
          {
            "dealToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "deal_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "photo_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Private deal token required"
          },
          "403": {
            "description": "Upload requires a selling enquiry"
          },
          "409": {
            "description": "Resume position conflict or incomplete file"
          },
          "413": {
            "description": "Size or count limit exceeded"
          },
          "422": {
            "description": "Invalid image or failed checksum"
          },
          "429": {
            "description": "Request limit; retry later"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        }
      }
    },
    "/api/v1/deals/{deal_id}/photos/{photo_id}/finish": {
      "post": {
        "operationId": "verifyEquipmentPhoto",
        "summary": "Verify full file length, SHA-256 and supported image type",
        "security": [
          {
            "dealToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "deal_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "photo_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Private deal token required"
          },
          "403": {
            "description": "Upload requires a selling enquiry"
          },
          "409": {
            "description": "Resume position conflict or incomplete file"
          },
          "413": {
            "description": "Size or count limit exceeded"
          },
          "422": {
            "description": "Invalid image or failed checksum"
          },
          "429": {
            "description": "Request limit; retry later"
          }
        }
      }
    },
    "/api/v1/deals/{deal_id}/photos/complete": {
      "post": {
        "operationId": "notifyEquipmentPhotos",
        "summary": "Notify SIB SCI that uploaded photos are ready. Repeating the same completed batch is safe.",
        "security": [
          {
            "dealToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "deal_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Private deal token required"
          },
          "403": {
            "description": "Upload requires a selling enquiry"
          },
          "409": {
            "description": "Resume position conflict or incomplete file"
          },
          "413": {
            "description": "Size or count limit exceeded"
          },
          "422": {
            "description": "Invalid image or failed checksum"
          },
          "429": {
            "description": "Request limit; retry later"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "photo_ids"
                ],
                "properties": {
                  "photo_ids": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 20,
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/deals/{deal_id}/photos/{photo_id}/download": {
      "get": {
        "operationId": "downloadEquipmentPhoto",
        "summary": "Download original private bytes with the deal token",
        "security": [
          {
            "dealToken": []
          }
        ],
        "parameters": [
          {
            "in": "path",
            "name": "deal_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "photo_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "400": {
            "description": "Invalid request"
          },
          "401": {
            "description": "Private deal token required"
          },
          "403": {
            "description": "Upload requires a selling enquiry"
          },
          "409": {
            "description": "Resume position conflict or incomplete file"
          },
          "413": {
            "description": "Size or count limit exceeded"
          },
          "422": {
            "description": "Invalid image or failed checksum"
          },
          "429": {
            "description": "Request limit; retry later"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "dealToken": {
        "type": "http",
        "scheme": "bearer",
        "description": "The private access_token returned when this deal was created."
      }
    }
  }
}