> ## Documentation Index
> Fetch the complete documentation index at: https://docs.so-me.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# মিডিয়া ফাইলের জন্য presigned আপলোড URL তৈরি করুন

> প্রতিটি ফাইলের জন্য presigned S3 URL ফেরত দেয়। প্রতিটি ফাইল তার uploadUrl-এ HTTP PUT দিয়ে আপলোড করুন, এবং সেই ফাইলের জন্য ঘোষণা করা mimetype-এর সমান মানের একটি Content-Type হেডার পাঠান (যেমন `Content-Type: image/jpeg`)। URL-টি ওই হেডার দিয়ে সাইন করা, তাই হেডার ছাড়া বা ভিন্ন মানসহ PUT করলে 403 SignatureDoesNotMatch ত্রুটিতে ব্যর্থ হয়। এরপর পোস্ট তৈরির রিকোয়েস্টে ফেরত আসা s3Prefix ও fileSrc মান পাঠান। HTML, SVG, XML, স্ক্রিপ্ট ও অজানা ধরন 400 ত্রুটিসহ প্রত্যাখ্যাত হয়।



## OpenAPI

````yaml /bn/openapi.json post /v1/posts/presign-media
openapi: 3.0.0
info:
  title: Social media studio API
  description: >-
    Social media studio API আপনাকে প্রোগ্রাম্যাটিকভাবে আপনার সোশ্যাল মিডিয়া
    ওয়ার্কফ্লো পরিচালনা করতে দেয় — পোস্ট তৈরি ও শিডিউল, মিডিয়া সাজানো,
    অ্যানালিটিক্স ট্র্যাক, টিম পরিচালনা এবং আরও অনেক কিছু।


    ## Base URL


    ```

    https://api.so-me.studio

    ```


    ## অথেনটিকেশন


    সব `/v1/*` এন্ডপয়েন্টে `X-API-Key` হেডারের মাধ্যমে পাঠানো একটি API কী লাগে।


    ```

    X-API-Key: sk_live_xxxxxxxxxxxxxxxxxxxxxxxx

    ```


    ## Scopes


    তৈরির সময় স্কোপ না দিলে একটি কী-র সম্পূর্ণ অ্যাক্সেস থাকে। স্কোপযুক্ত একটি
    কী শুধু সেই এন্ডপয়েন্টগুলোই কল করতে পারে যেগুলো তার স্কোপের আওতায় পড়ে;
    অন্য এন্ডপয়েন্ট `403 Forbidden` ফেরত দেয়। `GET` এন্ডপয়েন্টের জন্য
    `<resource>:read` লাগে; `POST`, `PUT`, `PATCH` ও `DELETE`-এর জন্য
    `<resource>:write` লাগে, যার মধ্যে `read` অন্তর্ভুক্ত। রিসোর্স: `accounts`,
    `posts` (ড্রাফট ও অনুমোদনসহ), `media`, `analytics` (শুধু পড়া), `inbox`,
    `ai`, `biolinks`, `teams`, `settings`, `webhooks`, `support`, `templates`
    (শুধু পড়া), `whatsapp`। `/v1/settings`-এর অধীনে API কী ও ওয়ার্কস্পেসের
    এন্ডপয়েন্ট এবং `PATCH /v1/settings/profile`-এর জন্য সম্পূর্ণ অ্যাক্সেসের কী
    লাগে। স্কোপযুক্ত কী MCP সার্ভার ব্যবহার করতে পারে না।


    ## আপনার API কী পাওয়া


    1. আপনার ওয়ার্কস্পেসে [Social media studio](https://so-me.studio)-তে লগ ইন
    করুন

    2. **সেটিংস** > **API** ট্যাবে যান

    3. **নতুন API কী**-তে ক্লিক করুন, একটি নাম দিন এবং কীটি কপি করুন


    > সম্পূর্ণ কী শুধু একবারই দেখানো হয়। এটি নিরাপদে রাখুন।


    ## রেট লিমিট


    প্রতি ওয়ার্কস্পেসে প্রতি মিনিটে 60টি রিকোয়েস্ট। এটি ছাড়ালে আপনি `429 Too
    Many Requests` রেসপন্স পাবেন।


    ## প্ল্যান


    API অ্যাক্সেস **Standard**, **Advanced** ও **Lifetime** প্ল্যানে পাওয়া
    যায়।
  version: '1.0'
  contact: {}
servers:
  - url: https://api.so-me.studio
    description: প্রোডাকশন
security: []
tags:
  - name: Posts
    description: সোশ্যাল মিডিয়া পোস্ট তৈরি, পরিচালনা, শিডিউল ও পাবলিশ করুন
  - name: Accounts
    description: সংযুক্ত সোশ্যাল মিডিয়া অ্যাকাউন্ট পরিচালনা করুন
  - name: Drafts
    description: ড্রাফট পোস্ট তৈরি ও পরিচালনা করুন
  - name: Media
    description: মিডিয়া ফাইল ও ফোল্ডার আপলোড, সাজানো ও পরিচালনা করুন
  - name: Analytics
    description: সোশ্যাল অ্যাকাউন্টজুড়ে প্ল্যাটফর্ম ও পোস্ট-স্তরের অ্যানালিটিক্স
  - name: Inbox
    description: সোশ্যাল ইনবক্সের কথোপকথন, উত্তর ও সেভ করা উত্তর
  - name: AI
    description: AI-চালিত টেক্সট ও ছবি জেনারেশন
  - name: Approvals
    description: টিম সহযোগিতার জন্য পোস্ট অনুমোদনের ওয়ার্কফ্লো
  - name: Teams
    description: টিম সদস্য ও আমন্ত্রণ ব্যবস্থাপনা
  - name: Biolinks
    description: বোতাম, পোস্ট ও থিমসহ বায়ো লিংক পেজ
  - name: Settings
    description: প্রোফাইল, প্রতিষ্ঠান, API কী, বিলিং ও ব্যবহার
  - name: Authentication
    description: নিবন্ধন, লগইন, পাসওয়ার্ড রিসেট ও ডিভাইস অথরাইজেশন
  - name: Plans
    description: উপলব্ধ সাবস্ক্রিপশন প্ল্যান, ফিচার ও অ্যাড-অন
  - name: Public Biolink
    description: >-
      পাবলিক বায়োলিংক পেজ রেজোলিউশন ও অ্যানালিটিক্স ট্র্যাকিং (কোনো অথেনটিকেশন
      লাগে না)
paths:
  /v1/posts/presign-media:
    post:
      tags:
        - Posts
      summary: মিডিয়া ফাইলের জন্য presigned আপলোড URL তৈরি করুন
      description: >-
        প্রতিটি ফাইলের জন্য presigned S3 URL ফেরত দেয়। প্রতিটি ফাইল তার
        uploadUrl-এ HTTP PUT দিয়ে আপলোড করুন, এবং সেই ফাইলের জন্য ঘোষণা করা
        mimetype-এর সমান মানের একটি Content-Type হেডার পাঠান (যেমন
        `Content-Type: image/jpeg`)। URL-টি ওই হেডার দিয়ে সাইন করা, তাই হেডার
        ছাড়া বা ভিন্ন মানসহ PUT করলে 403 SignatureDoesNotMatch ত্রুটিতে ব্যর্থ
        হয়। এরপর পোস্ট তৈরির রিকোয়েস্টে ফেরত আসা s3Prefix ও fileSrc মান পাঠান।
        HTML, SVG, XML, স্ক্রিপ্ট ও অজানা ধরন 400 ত্রুটিসহ প্রত্যাখ্যাত হয়।
      operationId: V1PostsController_presignMedia
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PresignV1MediaDto'
      responses:
        '201':
          description: Presigned URL তৈরি হয়েছে
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    fileId:
                      type: string
                      description: ফাইল রেকর্ডের UUID
                    uploadUrl:
                      type: string
                      description: >-
                        Presigned PUT URL (১ ঘণ্টা পরে মেয়াদ শেষ)। ঘোষিত
                        mimetype-এর সমান Content-Type সহ ফাইলটি পাঠান।
                    s3Prefix:
                      type: string
                      description: S3 অবজেক্ট কী — পোস্ট তৈরির সময় এটি পাঠান
                    fileSrc:
                      type: string
                      description: পাবলিক CDN URL — পোস্ট তৈরির সময় এটি পাঠান
      security:
        - X-API-Key: []
components:
  schemas:
    PresignV1MediaDto:
      type: object
      properties:
        postType:
          enum:
            - TEXT
            - IMAGE
            - MULTIPLE_IMAGES
            - VIDEO
            - CAROUSEL
            - REEL
            - STORY
          type: string
          description: মিডিয়াটি যে ধরনের পোস্টের জন্য
        socialMedia:
          enum:
            - TWITTER
            - INSTAGRAM
            - LINKEDIN
            - LINKEDIN_PAGE
            - FACEBOOK
            - TIKTOK
            - YOUTUBE
            - THREADS
            - WHATSAPP
          type: string
          description: লক্ষ্য সোশ্যাল মিডিয়া প্ল্যাটফর্ম
        files:
          description: যেসব ফাইলের জন্য আপলোড URL তৈরি করতে হবে
          type: array
          items:
            $ref: '#/components/schemas/PresignV1FileItemDto'
      required:
        - postType
        - socialMedia
        - files
    PresignV1FileItemDto:
      type: object
      properties:
        filename:
          type: string
          description: মূল ফাইলের নাম
        mimetype:
          type: string
          description: >-
            MIME টাইপ (যেমন image/jpeg, video/mp4)। আপলোডের PUT-কে ঠিক এই মানটিই
            তার Content-Type হেডার হিসেবে পাঠাতে হবে।
        size:
          type: number
          description: বাইটে ফাইলের আকার
        duration:
          type: number
          minimum: 0.1
          maximum: 86400
          description: সেকেন্ডে ভিডিওর সময়কাল
      required:
        - filename
        - mimetype
        - size
  securitySchemes:
    X-API-Key:
      type: apiKey
      in: header
      name: X-API-Key

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.