# AI Studios - Explore Experience Resources (Flattened) GET /api/v1/aistudios/experiences/flattened/ **POST:** List AI experience resources from a specific publication/studio in a flattened format. Each resource (AI Note, AI Expert, Quest) gets its own item in the response with the experience data repeated. This makes it easier for frontend to handle multiple resources per experience. Requires a publication URL in the POST body to filter experiences. Each item includes: - experience_id, experience_uid, experience_title, experience_description - resource_type, resource_id, resource_uid, resource_title - publication_title, publication_logo (if applicable) - metrics, creator, tags, trending_score **Filtering and sorting work the same as query parameters.** Reference: https://docs.aisquare.studio/api-reference/ai-square-studio-api/aistudios/experiences-flattened-list ## OpenAPI Specification ```yaml openapi: 3.1.0 info: title: AISquare Studio API version: 1.0.0 paths: /api/v1/aistudios/experiences/flattened/: get: operationId: experiences-flattened-list summary: AI Studios - Explore Experience Resources (Flattened) description: >- **POST:** List AI experience resources from a specific publication/studio in a flattened format. Each resource (AI Note, AI Expert, Quest) gets its own item in the response with the experience data repeated. This makes it easier for frontend to handle multiple resources per experience. Requires a publication URL in the POST body to filter experiences. Each item includes: - experience_id, experience_uid, experience_title, experience_description - resource_type, resource_id, resource_uid, resource_title - publication_title, publication_logo (if applicable) - metrics, creator, tags, trending_score **Filtering and sorting work the same as query parameters.** tags: - subpackage_aistudios parameters: - name: category in: query description: Filter by category ID required: false schema: type: integer - name: category_name in: query description: Filter by category name (case-insensitive partial match) required: false schema: type: string - name: ordering in: query description: Sort results. Use '-' prefix for descending order. required: false schema: $ref: >- #/components/schemas/ApiV1AistudiosExperiencesFlattenedGetParametersOrdering - name: page in: query description: A page number within the paginated result set. required: false schema: type: integer - name: page_size in: query description: Number of results to return per page. required: false schema: type: integer - name: search in: query description: Free text search across title, focus area, tags, and categories required: false schema: type: string - name: type in: query description: Filter by experience type(s). Supports multiple values. required: false schema: $ref: >- #/components/schemas/ApiV1AistudiosExperiencesFlattenedGetParametersType responses: '200': description: List of experience resources in flattened format for the publication content: application/json: schema: $ref: '#/components/schemas/PaginatedFlattenedExperienceResourceList' components: schemas: ApiV1AistudiosExperiencesFlattenedGetParametersOrdering: type: string enum: - '-newest' - '-popular' - '-trending' - '-updated' - newest - popular - trending - updated title: ApiV1AistudiosExperiencesFlattenedGetParametersOrdering ApiV1AistudiosExperiencesFlattenedGetParametersType: type: string enum: - AI_EXPERT - AI_NOTE - QUEST title: ApiV1AistudiosExperiencesFlattenedGetParametersType FlattenedExperienceResource: type: object properties: experience_id: type: integer experience_uid: type: string experience_title: type: string experience_description: type: string resource_type: type: - string - 'null' resource_id: type: - integer - 'null' resource_uid: type: - string - 'null' resource_title: type: - string - 'null' cover_image: type: - string - 'null' experience_type_logo: type: - string - 'null' experience_type_cover: type: - string - 'null' publication_id: type: - integer - 'null' publication_title: type: - string - 'null' publication_logo: type: - string - 'null' publication_custom_url: type: - string - 'null' metrics: type: object additionalProperties: description: Any type creator: type: object additionalProperties: description: Any type description: Get creator info from experience. tags: type: array items: description: Any type description: Get list of tag names from the experience. trending_score: type: number format: double description: Calculate trending score using AIStudiosService. reading_time: type: - integer - 'null' duration: type: - string - 'null' audio_url: type: - string - 'null' video_url: type: - string - 'null' thumbnail: type: - string - 'null' created_at: type: string format: date-time updated_at: type: string format: date-time required: - experience_id - experience_uid - experience_title - experience_description - resource_type - resource_id - resource_uid - resource_title - cover_image - experience_type_logo - experience_type_cover - publication_id - publication_title - publication_logo - publication_custom_url - metrics - creator - tags - trending_score - reading_time - duration - audio_url - video_url - thumbnail - created_at - updated_at description: >- Flattened serializer for experience-resource combinations in aistudios. Each resource gets its own item with experience data repeated. Makes it easier for frontend to handle multiple resources per experience. title: FlattenedExperienceResource PaginatedFlattenedExperienceResourceList: type: object properties: count: type: integer next: type: - string - 'null' format: uri previous: type: - string - 'null' format: uri results: type: array items: $ref: '#/components/schemas/FlattenedExperienceResource' required: - count - results title: PaginatedFlattenedExperienceResourceList ``` ## SDK Code Examples ```python Example flattened resources response import requests url = "https://api.example.com/api/v1/aistudios/experiences/flattened/" payload = { "publication_url": "https://ai-research-studio.example.com" } headers = {"Content-Type": "application/json"} response = requests.get(url, json=payload, headers=headers) print(response.json()) ``` ```javascript Example flattened resources response const url = 'https://api.example.com/api/v1/aistudios/experiences/flattened/'; const options = { method: 'GET', headers: {'Content-Type': 'application/json'}, body: '{"publication_url":"https://ai-research-studio.example.com"}' }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go Example flattened resources response package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://api.example.com/api/v1/aistudios/experiences/flattened/" payload := strings.NewReader("{\n \"publication_url\": \"https://ai-research-studio.example.com\"\n}") req, _ := http.NewRequest("GET", url, payload) req.Header.Add("Content-Type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby Example flattened resources response require 'uri' require 'net/http' url = URI("https://api.example.com/api/v1/aistudios/experiences/flattened/") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["Content-Type"] = 'application/json' request.body = "{\n \"publication_url\": \"https://ai-research-studio.example.com\"\n}" response = http.request(request) puts response.read_body ``` ```java Example flattened resources response import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.example.com/api/v1/aistudios/experiences/flattened/") .header("Content-Type", "application/json") .body("{\n \"publication_url\": \"https://ai-research-studio.example.com\"\n}") .asString(); ``` ```php Example flattened resources response request('GET', 'https://api.example.com/api/v1/aistudios/experiences/flattened/', [ 'body' => '{ "publication_url": "https://ai-research-studio.example.com" }', 'headers' => [ 'Content-Type' => 'application/json', ], ]); echo $response->getBody(); ``` ```csharp Example flattened resources response using RestSharp; var client = new RestClient("https://api.example.com/api/v1/aistudios/experiences/flattened/"); var request = new RestRequest(Method.GET); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{\n \"publication_url\": \"https://ai-research-studio.example.com\"\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift Example flattened resources response import Foundation let headers = ["Content-Type": "application/json"] let parameters = ["publication_url": "https://ai-research-studio.example.com"] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://api.example.com/api/v1/aistudios/experiences/flattened/")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers request.httpBody = postData as Data let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```