{"components":{"parameters":{"fields":{"description":"List of comma separated model fields to return only.","in":"query","name":"fields","schema":{"pattern":"(\\w+)(,\\w+)*","type":"string"}},"filter":{"description":"Filter operations on fields are available with query parameters giving field name and operator. Available operators are `eq`, `lt`, `lte`, `gt`, `gte`, `ne`, `like`, `ilike`, `icontains`, `isnull`, `in`, `notin`. The `like` operator is case-sensitive and takes a `%` wildcard. ``ilike` is the same as `like` but case-insensitive. icontains` performs a case-insensitive `query searching only for matching substrings. isnull` accepts `0` for IS NOT NULL, `and everything else for IS NULL. like`, `ilike`, and `icontains` operations are only available for string fields.","in":"query","name":"{field}__{operator}","schema":{"type":"string"}},"filter_exact":{"description":"Shorthand for {field}__eq filter.","in":"query","name":"{field}","schema":{"type":"string"}},"limit":{"description":"Limit parameter for paging output.","in":"query","name":"limit","schema":{"format":"integer","type":"number"}},"offset":{"description":"Offset parameter for paging output.","in":"query","name":"offset","schema":{"format":"integer","type":"number"}},"sort":{"description":"Sort specification, can be <field> (ascending order) or -<field> (descending order).","in":"query","name":"sort","schema":{"pattern":"[+-]?\\w+","type":"string"}}},"schemas":{"Error":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":{},"type":"object"},"message":{"type":"string"},"status":{"type":"integer"},"success":{"default":false}},"type":"object"},"ListMeta":{"properties":{"args":{"description":"\n            Dictionary reflecting the request parameters.\n            Parameters with default values will be given with\n            their default even it not present in the request.","type":"object"},"count":{"description":"Count of total available results.","format":"int64","type":"integer"},"next":{"description":"URL to next page of results.","type":"string"},"prev":{"description":"URL to previous page of results.","type":"string"}},"type":"object"},"QuotaReservation":{"additionalProperties":false,"properties":{"amount":{"nullable":true},"aoi_ref":{"type":"string"},"collection_id":{"type":"string"},"created_at":{"format":"date-time","type":"string"},"id":{"type":"integer"},"organization_id":{"type":"integer"},"product_id":{"type":"integer"},"state":{"type":"string"},"updated_at":{"format":"date-time","type":"string"},"url":{"readOnly":true},"user_id":{"type":"integer"}},"type":"object"},"QuotaReservationBulkRelease":{"additionalProperties":false,"properties":{"collection_id":{"description":"Collection ID in either full ref format (pl:features/my/collection-hash) or short hash format (collection-hash)","type":"string"},"ids":{"items":{"type":"integer"},"type":"array"}},"type":"object"},"QuotaReservationCreate":{"additionalProperties":false,"properties":{"aoi_refs":{"description":"List of area of interest references","items":{"type":"string"},"type":"array"},"collection_id":{"description":"Collection ID in either full ref format (pl:features/my/collection-hash) or short hash format (collection-hash)","type":"string"},"product_id":{"description":"Product ID from /my/products endpoint","type":"integer"}},"type":"object"},"QuotaReservationCreated":{"additionalProperties":false,"properties":{"quota_remaining":{"readOnly":true},"quota_reservations":{"items":{"$ref":"#/components/schemas/QuotaReservationCreatedRef"},"type":"array"},"quota_total":{"readOnly":true},"quota_units":{"readOnly":true},"quota_used":{"readOnly":true},"url":{"readOnly":true}},"required":["quota_remaining","quota_total","quota_used"],"type":"object"},"QuotaReservationCreatedRef":{"additionalProperties":false,"properties":{"aoi_ref":{"type":"string"},"id":{"type":"integer"},"quota_used":{"type":"number"},"state":{"type":"string"}},"type":"object"},"QuotaReservationEstimation":{"additionalProperties":false,"properties":{"estimated_costs":{"description":"Breakdown of costs per AOI ref in display units","readOnly":true},"quota_remaining":{"description":"Remaining quota after existing reservations (excludes this estimate's cost) in display units","readOnly":true},"quota_total":{"description":"Total quota originally allocated to this product access in display units","readOnly":true},"quota_units":{"description":"Display units of measurement (e.g., 'sqkm', 'hectare')","readOnly":true},"total_cost":{"description":"Total quota cost for all requested AOI refs in display units","readOnly":true}},"type":"object"},"QuotaReservationEstimationCost":{"additionalProperties":false,"properties":{"aoi_ref":{"type":"string"},"cost":{"type":"number"}},"required":["aoi_ref","cost"],"type":"object"},"QuotaReservationJob":{"additionalProperties":false,"properties":{"collection_id":{"type":"string"},"id":{"type":"integer"},"organization_id":{"type":"integer"},"percentage":{"type":"number"},"processed_items":{"type":"integer"},"status":{"type":"string"},"total_items":{"type":"integer"},"type":{"type":"string"}},"type":"object"},"QuotaReservationProduct":{"additionalProperties":false,"properties":{"description":{"type":"string"},"edp_id":{"type":"string"},"title":{"type":"string"}},"type":"object"},"QuotaReservationPubSubMessage":{"additionalProperties":false,"properties":{"action":{"type":"string"},"aoi_refs":{"items":{"type":"string"},"nullable":true,"type":"array"},"collection_id":{"nullable":true,"type":"string"},"job_id":{"nullable":true,"type":"integer"},"quota_reservation_ids":{"items":{"type":"integer"},"nullable":true,"type":"array"},"user_id":{"nullable":true,"type":"integer"}},"required":["action"],"type":"object"}}},"info":{"description":"Query and manage quota and product access related data","title":"Quota API","version":"1.0.0"},"openapi":"3.0.2","paths":{"/account/v1/quota-reservations/":{"get":{"description":"Retrieve a paginated list of quota reservations for the current organization.\nSupports filtering, sorting, and field selection.\n","parameters":[{"$ref":"#/components/parameters/fields"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/offset"},{"$ref":"#/components/parameters/sort"},{"$ref":"#/components/parameters/filter"},{"$ref":"#/components/parameters/filter_exact"}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"meta":{"$ref":"#/components/schemas/ListMeta"},"results":{"items":{"$ref":"#/components/schemas/QuotaReservation"},"type":"array"}},"type":"object"}}},"description":"List of quota reservations retrieved successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request - Invalid query parameters"}},"summary":"Get all quota reservations","tags":["QuotaReservations"]},"post":{"description":"Create a quota reservation for the specified product and area of interest references.\nUse the product_id parameter which corresponds to the 'id' field returned from the /my/products endpoint.\n","requestBody":{"content":{"application/json":{"examples":{"basic":{"summary":"Basic quota reservation","value":{"aoi_refs":["aoi_123","aoi_456"],"product_id":12345}}},"schema":{"$ref":"#/components/schemas/QuotaReservationCreate"}}},"description":"The quota reservation to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuotaReservationCreated"}}},"description":"Quota reservation created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request - Invalid input or insufficient quota"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Forbidden - Insufficient permissions"}},"summary":"Create a quota reservation","tags":["QuotaReservations"]}},"/account/v1/quota-reservations/bulk-reserve":{"post":{"description":"Submit a bulk request to create quota reservations. This operation is processed\nasynchronously and returns a job ID to track the progress.\nThe product_id parameter corresponds to the 'id' field returned from the /my/products endpoint.\n","requestBody":{"content":{"application/json":{"examples":{"bulk":{"summary":"Bulk quota reservation","value":{"aoi_refs":["aoi_123","aoi_456","aoi_789"],"collection_id":"my-collection-3qjDEZD","product_id":12345}}},"schema":{"$ref":"#/components/schemas/QuotaReservationCreate"}}},"description":"The bulk quota reservations to create","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"job_id":{"description":"ID to track the async job","type":"string"},"status":{"description":"Current job status","example":"pending","type":"string"}},"type":"object"}}},"description":"Bulk reservation job created successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request - Invalid input or insufficient quota"}},"summary":"Create bulk quota reservations asynchronously","tags":["QuotaReservations"]}},"/account/v1/quota-reservations/estimate":{"post":{"description":"Calculate an estimate for quota usage given a product and list of area of interest (AOI) references.\nThis endpoint helps users understand the quota cost of their intended reservations before actually\ncreating them. It does NOT create any reservations or modify quota - it only provides estimates.\n\nThe product_id parameter corresponds to the 'id' field returned from the /my/products endpoint.\n\nIf using collection_id, it can be provided in either full ref format (pl:features/my/collection-hash)\nor short hash format (collection-hash).\n\n**Important**: The quota_remaining field shows your current available quota and does NOT subtract\nthe cost of the AOIs being estimated. To determine if you have sufficient quota for the request,\ncompare total_cost against quota_remaining.\n\n**Response fields**:\n\n- **total_cost** (float): The total quota cost for all requested AOI refs in this estimate.\n  This is the sum of all individual AOI costs and represents how much quota would be\n  consumed if you were to reserve all the requested AOIs.\n\n- **quota_remaining** (float): Your current available quota after accounting for all existing\n  reservations. This value does NOT include/subtract the cost of the AOIs being estimated.\n  May be null if the product has unlimited quota.\n\n- **quota_total** (float): The total quota originally allocated to this product access.\n  This is your quota limit before any reservations. May be null if unlimited.\n\n- **estimated_costs** (array): Detailed breakdown of quota costs per AOI ref. Each item contains:\n  - aoi_ref (string): The AOI reference\n  - cost (float): The quota cost for this specific AOI\n\n- **quota_units** (string): The units of measurement for all quota values (e.g., \"square_meter\").\n\n**Example usage**:\nIf quota_total=1000, quota_remaining=700 (meaning 300 already reserved), and total_cost=500,\nthen you have sufficient quota since 500 < 700. After reservation, quota_remaining would be 200.\n","requestBody":{"content":{"application/json":{"examples":{"estimate":{"summary":"Quota estimation request","value":{"aoi_refs":["aoi_123","aoi_456"],"product_id":12345}}},"schema":{"$ref":"#/components/schemas/QuotaReservationCreate"}}},"description":"The product and AOI refs to estimate","required":true},"responses":{"200":{"content":{"application/json":{"examples":{"insufficient_quota":{"summary":"Example with insufficient quota","value":{"estimated_costs":[{"aoi_ref":"aoi_789","cost":800000.0}],"quota_remaining":200000.0,"quota_total":1000000.0,"quota_units":"square_meter","total_cost":800000.0}},"sufficient_quota":{"summary":"Example with sufficient quota","value":{"estimated_costs":[{"aoi_ref":"aoi_123","cost":200000.0},{"aoi_ref":"aoi_456","cost":300000.0}],"quota_remaining":700000.0,"quota_total":1000000.0,"quota_units":"square_meter","total_cost":500000.0}},"unlimited_quota":{"summary":"Example with unlimited quota","value":{"estimated_costs":[{"aoi_ref":"aoi_123","cost":500000.0}],"quota_remaining":null,"quota_total":null,"quota_units":"square_meter","total_cost":500000.0}}},"schema":{"$ref":"#/components/schemas/QuotaReservationEstimation"}}},"description":"Quota estimate calculated successfully"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Bad Request - Invalid input"}},"summary":"Calculate quota reservation estimate without creating reservations","tags":["QuotaReservations"]}},"/account/v1/quota-reservations/jobs":{"get":{"description":"Get all jobs as paginated list. If successful, returns a list of jobs.","parameters":[{"$ref":"#/components/parameters/fields"},{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/offset"},{"$ref":"#/components/parameters/sort"},{"$ref":"#/components/parameters/filter"},{"$ref":"#/components/parameters/filter_exact"}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"meta":{"$ref":"#/components/schemas/ListMeta"},"results":{"items":{"$ref":"#/components/schemas/QuotaReservationJob"},"type":"array"}},"type":"object"}}},"description":"A list representation of all jobs."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"An error such as validation problems."}},"summary":"Get all jobs as a paginated list.","tags":["QuotaReservations"]}},"/account/v1/quota-reservations/spec":{}}}
