{"components":{"schemas":{"AmazonS3Params":{"additionalProperties":false,"properties":{"aws_access_key_id":{"description":"AWS access key ID for authentication with Amazon S3.","type":"string","x-label":"AWS access key ID","x-order":3},"aws_region":{"description":"The AWS region where the S3 bucket is located.","type":"string","x-label":"AWS region","x-order":2},"aws_secret_access_key":{"description":"AWS secret access key for authentication with Amazon S3.","type":"string","x-label":"AWS secret access key","x-order":4},"bucket":{"description":"The name of the Amazon S3 bucket where data will be delivered.","type":"string","x-label":"Bucket name","x-order":1},"explicit_sse":{"default":false,"description":"Enable explicit server-side encryption headers for SSE-S3.","type":"boolean","x-label":"Enable SSE-S3 headers","x-order":5}},"required":["bucket","aws_region","aws_access_key_id","aws_secret_access_key"],"type":"object"},"AmazonS3PatchParams":{"additionalProperties":false,"properties":{"aws_access_key_id":{"description":"AWS access key ID for authentication with Amazon S3.","type":"string","x-label":"AWS access key ID","x-order":1},"aws_secret_access_key":{"description":"AWS secret access key for authentication with Amazon S3.","type":"string","x-label":"AWS secret access key","x-order":2},"explicit_sse":{"default":false,"description":"Enable explicit server-side encryption headers for SSE-S3.","type":"boolean","x-label":"Enable SSE-S3 headers","x-order":3}},"required":["aws_access_key_id","aws_secret_access_key"],"type":"object"},"AzureCloudStorageParams":{"additionalProperties":false,"properties":{"account":{"description":"The name of the Azure Storage account where data will be delivered.","type":"string","x-label":"Storage account name","x-order":1},"container":{"description":"The name of the Azure Blob Storage container within the account.","type":"string","x-label":"Container name","x-order":2},"sas_token":{"description":"Shared Access Signature (SAS) token for authentication with Azure Storage.","type":"string","x-label":"SAS token","x-order":3},"storage_endpoint_suffix":{"description":"The storage endpoint suffix for the Azure Storage service (optional).","type":"string","x-label":"Storage endpoint suffix"}},"required":["account","container","sas_token"],"type":"object"},"AzureCloudStoragePatchParams":{"additionalProperties":false,"properties":{"sas_token":{"description":"Shared Access Signature (SAS) token for authentication with Azure Storage.","type":"string","x-label":"SAS token","x-order":1}},"required":["sas_token"],"type":"object"},"DefaultDestinationRequest":{"additionalProperties":false,"description":"A DefaultDestinationRequest is an object describing which destination should be set as the default.","properties":{"destination_id":{"description":"The ID of the default destination.","type":"string"}},"required":["destination_id"],"title":"Default destination put request","type":"object"},"Destination":{"description":"Destination.","properties":{"_links":{"$ref":"#/components/schemas/Links"},"archived":{"description":"Timestamp when the Destination was archived.","format":"date-time","nullable":true,"type":"string"},"created":{"description":"Timestamp when the Destination was created.","format":"date-time","type":"string"},"default":{"default":false,"description":"True if this is the default destination for the organization.","nullable":true,"type":"boolean"},"id":{"description":"A string to uniquely identify a Destination.","type":"string"},"name":{"description":"A name given to this Destination.","type":"string"},"ownership":{"$ref":"#/components/schemas/Ownership"},"parameters":{"$ref":"#/components/schemas/DestinationParameters"},"permissions":{"$ref":"#/components/schemas/Permissions"},"pl:ref":{"description":"A reference for the destination.","type":"string"},"type":{"$ref":"#/components/schemas/DestinationType"},"updated":{"description":"Timestamp when the Destination was last updated.","format":"date-time","type":"string"}},"required":["id","name","type","parameters","created","updated","pl:ref","_links","archived","default","permissions","ownership"],"type":"object"},"DestinationParameters":{"description":"Parameters for the given Destination type.","oneOf":[{"$ref":"#/components/schemas/GoogleCloudStorageParams"},{"$ref":"#/components/schemas/AmazonS3Params"},{"$ref":"#/components/schemas/AzureCloudStorageParams"},{"$ref":"#/components/schemas/OracleCloudStorageParams"},{"$ref":"#/components/schemas/S3CompatibleParams"}],"type":"object"},"DestinationPatchParameters":{"description":"Patch parameters for the given Destination type.","oneOf":[{"$ref":"#/components/schemas/GoogleCloudStoragePatchParams"},{"$ref":"#/components/schemas/AmazonS3PatchParams"},{"$ref":"#/components/schemas/AzureCloudStoragePatchParams"},{"$ref":"#/components/schemas/OracleCloudStoragePatchParams"},{"$ref":"#/components/schemas/S3CompatiblePatchParams"}],"type":"object"},"DestinationPatchRequest":{"additionalProperties":false,"anyOf":[{"required":["parameters"]},{"required":["archive"]},{"required":["name"]}],"description":"A DestinationPatchRequest is an object describing how to update a Destination.","properties":{"archive":{"description":"True to archive the destination, false to unarchive.","type":"boolean"},"name":{"description":"A string to uniquely identify a Destination.","maxLength":63,"minLength":3,"type":"string"},"parameters":{"$ref":"#/components/schemas/DestinationPatchParameters"}},"title":"Destination patch request","type":"object"},"DestinationRequest":{"additionalProperties":false,"description":"A DestinationRequest is an object describing how to store a Destination.","properties":{"name":{"description":"A name given to this Destination.","maxLength":63,"minLength":3,"type":"string"},"parameters":{"$ref":"#/components/schemas/DestinationParameters"},"type":{"$ref":"#/components/schemas/DestinationType"}},"required":["type","parameters"],"title":"Destination request","type":"object"},"DestinationType":{"description":"The type of Destination.","enum":["google_cloud_storage","amazon_s3","azure_blob_storage","oracle_cloud_storage","s3_compatible"],"type":"string"},"DestinationsResponse":{"properties":{"_links":{"$ref":"#/components/schemas/Links"},"destinations":{"description":"Array of Destinations.","items":{"$ref":"#/components/schemas/Destination"},"type":"array"}},"required":["destinations","_links"]},"Error":{"properties":{"code":{"format":"int32","type":"integer"},"message":{"type":"string"}},"required":["code","message"],"type":"object"},"GoogleCloudStorageParams":{"additionalProperties":false,"properties":{"bucket":{"description":"The name of the Google Cloud Storage bucket where data will be delivered.","type":"string","x-label":"Bucket name","x-order":1},"credentials":{"description":"Base64-encoded service account JSON credentials for Google Cloud Storage access.\n\nTo encode the credentials: `cat service-account.json | base64 | tr -d '\\n'`\n","type":"string","x-label":"Service account credentials","x-order":2}},"required":["bucket","credentials"],"type":"object"},"GoogleCloudStoragePatchParams":{"additionalProperties":false,"properties":{"credentials":{"description":"Base64-encoded service account JSON credentials for Google Cloud Storage access.\n\nTo encode the credentials: `cat service-account.json | base64 | tr -d '\\n'`\n","type":"string","x-label":"Service account credentials","x-order":1}},"required":["credentials"],"type":"object"},"Links":{"properties":{"_self":{"description":"RFC 3986 URI representing the location of this object.","type":"string"}},"required":["_self"],"type":"object"},"OracleCloudStorageParams":{"additionalProperties":false,"properties":{"bucket":{"description":"The name of the Oracle Cloud Storage bucket where data will be delivered.","type":"string","x-label":"Bucket name","x-order":1},"customer_access_key_id":{"description":"Customer access key ID for authentication with Oracle Cloud Storage.","type":"string","x-label":"Customer access key ID","x-order":4},"customer_secret_key":{"description":"Customer secret key for authentication with Oracle Cloud Storage.","type":"string","x-label":"Customer secret key","x-order":5},"namespace":{"description":"The Oracle Object Storage namespace that contains the bucket.","type":"string","x-label":"Namespace","x-order":3},"region":{"description":"The Oracle Cloud region where the bucket is located.","type":"string","x-label":"Region","x-order":2}},"required":["bucket","region","namespace","customer_access_key_id","customer_secret_key"],"type":"object"},"OracleCloudStoragePatchParams":{"additionalProperties":false,"properties":{"customer_access_key_id":{"description":"Customer access key ID for authentication with Oracle Cloud Storage.","type":"string","x-label":"Customer access key ID","x-order":1},"customer_secret_key":{"description":"Customer secret key for authentication with Oracle Cloud Storage.","type":"string","x-label":"Customer secret key","x-order":2}},"required":["customer_access_key_id","customer_secret_key"],"type":"object"},"Ownership":{"description":"Ownership information for the destination.","properties":{"is_owner":{"description":"True if the user is the creator of the destination.","type":"boolean"},"owner_id":{"description":"The ID of the user who created the destination.","format":"int64","type":"integer"}},"required":["is_owner","owner_id"],"type":"object"},"Permissions":{"description":"Permissions for the destination.","properties":{"can_write":{"description":"True if the user can write to the destination (patch).","type":"boolean"}},"required":["can_write"],"type":"object"},"S3CompatibleParams":{"additionalProperties":false,"properties":{"access_key_id":{"description":"Access key ID for authentication with the S3-compatible service.","type":"string","x-label":"Access key ID","x-order":4},"bucket":{"description":"The name of the S3-compatible bucket where data will be delivered.","type":"string","x-label":"Bucket name","x-order":1},"endpoint":{"description":"The URL endpoint for the S3-compatible storage service.","type":"string","x-label":"Service endpoint","x-order":2},"region":{"description":"The region identifier for the S3-compatible storage service.","type":"string","x-label":"Region","x-order":3},"secret_access_key":{"description":"Secret access key for authentication with the S3-compatible service.","type":"string","x-label":"Secret access key","x-order":5},"use_path_style":{"default":false,"description":"Use path-style URL addressing with the bucket name in the URL path.","type":"boolean","x-label":"Use path-style addressing","x-order":6}},"required":["bucket","endpoint","region","access_key_id","secret_access_key"],"type":"object"},"S3CompatiblePatchParams":{"additionalProperties":false,"properties":{"access_key_id":{"description":"Access key ID for authentication with the S3-compatible service.","type":"string","x-label":"Access key ID","x-order":1},"secret_access_key":{"description":"Secret access key for authentication with the S3-compatible service.","type":"string","x-label":"Secret access key","x-order":2},"use_path_style":{"default":false,"description":"Use path-style URL addressing with the bucket name in the URL path.","type":"boolean","x-label":"Use path-style addressing","x-order":3}},"required":["access_key_id","secret_access_key"],"type":"object"}},"securitySchemes":{"BasicAuth":{"scheme":"basic","type":"http"},"JWT":{"description":"Provide {JWT} token in a header like this: `Authorization: Bearer {JWT}`.","scheme":"bearer","type":"http"}}},"info":{"description":"The Destinations API provides a way to manage cloud storage destinations.","title":"Destinations API","version":"v1.0.0"},"openapi":"3.0.3","paths":{"/destinations/v1":{"get":{"operationId":"PublicGetDestinations","parameters":[{"description":"Filter destinations by archived status.","in":"query","name":"archived","schema":{"type":"boolean"}},{"description":"Filter destinations owned by requester.","in":"query","name":"is_owner","schema":{"type":"boolean"}},{"description":"Filter destinations where the requester has write permissions.","in":"query","name":"can_write","schema":{"type":"boolean"}},{"description":"Filter destinations default status.","in":"query","name":"is_default","schema":{"type":"boolean"}},{"description":"Sort destinations by one or more fields. Separate multiple fields with commas. Add ' ASC' or ' DESC' to specify direction (defaults to ASC). Default sort is `created DESC`.\n\nSupported fields: created, name, type, updated\n\nExamples: `name`, `name DESC`, `name,created DESC`\n","in":"query","name":"sort_by","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DestinationsResponse"}}},"description":"A successful destination response."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for a request that has unauthorized credentials."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal server error."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unexpected error."}},"summary":"List all destinations"},"post":{"operationId":"PublicAddDestination","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DestinationRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Destination"}}},"description":"A successful destination response."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for a bad destination request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for a destination that has unauthorized credentials."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for rate limiting"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal server error."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unexpected error."}},"summary":"Create a new destination"}},"/destinations/v1/default":{"delete":{"operationId":"PublicUnsetDefaultDestination","responses":{"204":{"description":"The default destination was successfully unset."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for a request that has unauthorized credentials."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal server error."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unexpected error."}},"summary":"Unset the default destination"},"get":{"operationId":"PublicGetDefaultDestination","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Destination"}}},"description":"A successful destination response."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for a request that has unauthorized credentials."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for a destination that was not found."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal server error."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unexpected error."}},"summary":"Get the default destination"},"put":{"operationId":"PublicSetDefaultDestination","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DefaultDestinationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Destination"}}},"description":"The default destination was set successfully."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for a bad destination request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for a destination that has unauthorized credentials."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for a destination that was not found."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for a conflict, such as attempting to set a default destination when a default already exists."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal server error."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unexpected error."}},"summary":"Set the default destination"}},"/destinations/v1/spec":{"get":{"operationId":"PublicGetSpec","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"A successful response."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal server error."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unexpected error."}},"summary":"Get the OpenAPI spec"}},"/destinations/v1/{destinationID}":{"get":{"operationId":"PublicGetDestination","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Destination"}}},"description":"A successful destination response."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for a request that has unauthorized credentials."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for a destination that was not found."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal server error."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unexpected error."}},"summary":"Get a destination"},"parameters":[{"in":"path","name":"destinationID","required":true,"schema":{"type":"string"}}],"patch":{"operationId":"PublicPatchDestination","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DestinationPatchRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Destination"}}},"description":"A successful destination response."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for a bad destination request."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for a destination that has unauthorized credentials."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for a destination that was not found."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Response for rate limiting"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal server error."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Unexpected error."}},"summary":"Update a destination"}}},"security":[{"JWT":[]},{"BasicAuth":[]}]}