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

# Share Meeting

> Use the API to share meeting transcripts with external users via email or a password-protected link

## Overview

The `shareMeeting` mutation shares a meeting transcript with one or more users by email. Shared users receive access to view the transcript without needing to be on the same team.

It can also create a password-protected link so people without a Fireflies account can view the meeting. See [Password-protected links](#password-protected-links-beta).

## Arguments

<ParamField path="input" type="ShareMeetingInput" required>
  The sharing configuration. See [ShareMeetingInput](/schema/input/share-meeting-input).
</ParamField>

## Response

<ResponseField name="success" type="Boolean">
  Whether the share was created.
</ResponseField>

<ResponseField name="message" type="String">
  Additional detail about the result, when available.
</ResponseField>

<ResponseField name="share_slug" type="String">
  Identifier of the password-protected link. Only returned when `share_type` is `PASSWORD_LINK`. The link is `https://app.fireflies.ai/view/p/{share_slug}`.
</ResponseField>

## Usage Example

To share a meeting, provide the meeting ID and an array of email addresses. You can optionally set an expiry period.

```graphql theme={null}
mutation ShareMeeting($input: ShareMeetingInput!) {
  shareMeeting(input: $input) {
    success
    message
  }
}
```

<RequestExample>
  ```bash curl theme={null}
  curl -X POST https://api.fireflies.ai/graphql \
  	-H "Content-Type: application/json" \
  	-H "Authorization: Bearer your_api_key" \
  	-d '{
  		"query": "mutation($input: ShareMeetingInput!) { shareMeeting(input: $input) { success message } }",
  		"variables": {
  			"input": {
  				"meeting_id": "your_meeting_id",
  				"emails": ["user@example.com"],
  				"expiry_days": 7
  			}
  		}
  	}'
  ```

  ```javascript javascript theme={null}
  const axios = require('axios');

  const url = 'https://api.fireflies.ai/graphql';
  const headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_api_key'
  };

  const data = {
    query: `
      mutation($input: ShareMeetingInput!) {
        shareMeeting(input: $input) {
          success
          message
        }
      }
    `,
    variables: {
      input: {
        meeting_id: 'your_meeting_id',
        emails: ['user@example.com'],
        expiry_days: 7
      }
    }
  };

  const response = await axios.post(url, data, { headers });
  console.log(response.data);
  ```

  ```python python theme={null}
  import requests

  url = 'https://api.fireflies.ai/graphql'
  headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_api_key'
  }

  data = {
    'query': '''
      mutation($input: ShareMeetingInput!) {
        shareMeeting(input: $input) {
          success
          message
        }
      }
    ''',
    'variables': {
      'input': {
        'meeting_id': 'your_meeting_id',
        'emails': ['user@example.com'],
        'expiry_days': 7
      }
    }
  }

  response = requests.post(url, json=data, headers=headers)
  print(response.json())
  ```

  ```java java theme={null}
  import java.io.IOException;
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpResponse;
  import java.net.http.HttpRequest.BodyPublishers;

  public class ShareMeetingExample {
      public static void main(String[] args) throws IOException, InterruptedException {
          HttpClient client = HttpClient.newHttpClient();

          String json = "{"
              + "\"query\":\"mutation($input: ShareMeetingInput!) { shareMeeting(input: $input) { success message } }\","
              + "\"variables\":{"
              + "\"input\":{"
              + "\"meeting_id\":\"your_meeting_id\","
              + "\"emails\":[\"user@example.com\"],"
              + "\"expiry_days\":7"
              + "}"
              + "}"
              + "}";

          HttpRequest request = HttpRequest.newBuilder()
                  .uri(URI.create("https://api.fireflies.ai/graphql"))
                  .header("Content-Type", "application/json")
                  .header("Authorization", "Bearer your_api_key")
                  .POST(BodyPublishers.ofString(json))
                  .build();

          client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
              .thenApply(HttpResponse::body)
              .thenAccept(System.out::println)
              .join();
      }
  }
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "data": {
      "shareMeeting": {
        "success": true,
        "message": null
      }
    }
  }
  ```
</ResponseExample>

## Password-protected links (Beta)

<Note>
  Password-protected sharing is in **beta** and is being progressively rolled out. Contact support to have it enabled for your organization.
</Note>

Set `share_type` to `PASSWORD_LINK` and supply a `password` to create a link that anyone can open without a Fireflies account. The recipients in `emails` are notified with the link; the password is never included in that email, so share it with them separately.

```graphql theme={null}
mutation ShareMeeting {
  shareMeeting(
    input: {
      meeting_id: "your_meeting_id"
      emails: ["guest@example.com"]
      share_type: PASSWORD_LINK
      password: "a-strong-password"
      expiry_days: 7
    }
  ) {
    success
    message
    share_slug
  }
}
```

```json Response theme={null}
{
  "data": {
    "shareMeeting": {
      "success": true,
      "message": "Invite created successfully",
      "share_slug": "aB3dE6gH"
    }
  }
}
```

Use `share_slug` to build the guest link: `https://app.fireflies.ai/view/p/aB3dE6gH`.

Things to know:

* A meeting has at most one password-protected link per sharer. Calling the mutation again returns the existing link instead of creating a new one.
* Passing a different `password` on a later call rotates the password for that link; the previous password stops working.
* `password` must be 8–128 characters and cannot contain line breaks.
* `expiry_days` applies to password-protected links too. After it elapses, the link no longer opens the meeting.
* `password` is only accepted with `share_type: PASSWORD_LINK`, and is required for it. Otherwise the mutation returns an [`invalid_arguments`](/miscellaneous/error-codes#invalid_arguments) error.

## FAQ

<Accordion title="Who can share a meeting?">
  <p>Only the meeting owner or a team admin (in the same team as the owner) can share a meeting.</p>
</Accordion>

<Accordion title="What happens if the user is already invited?">
  <p>The mutation returns `success: false` with a message indicating that the invitees are already invited.</p>
</Accordion>

<Accordion title="How many emails can I share with at once?">
  <p>You can share with up to 50 email addresses per request.</p>
</Accordion>

<Accordion title="Do recipients of a password-protected link need a Fireflies account?">
  <p>No. Anyone with the link and the password can view the meeting. The password is not included in the notification email, so send it to them separately.</p>
</Accordion>

## Rate Limits

The `shareMeeting` mutation is rate-limited to **60 requests per hour** per user, in addition to the general API rate limits.

## Error Codes

List of possible error codes that may be returned by the `shareMeeting` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).

<Accordion title="object_not_found">
  <p>The specified transcript could not be found or you do not have access to it.</p>
</Accordion>

<Accordion title="require_elevated_privilege">
  <p>The user must be either the meeting owner or a team admin to share the meeting.</p>
</Accordion>

<Accordion title="invalid_arguments">
  <p>A `password` was supplied without `share_type: PASSWORD_LINK`, or `share_type: PASSWORD_LINK` was used without a valid `password`.</p>
</Accordion>

## Additional Resources

<CardGroup cols={2}>
  <Card title="Revoke Shared Meeting Access" icon="link" href="/graphql-api/mutation/revoke-shared-meeting-access">
    Revoke shared access to a meeting
  </Card>

  <Card title="Transcript" icon="link" href="/graphql-api/query/transcript">
    Query transcript details including shared\_with
  </Card>

  <Card title="ShareMeetingType" icon="link" href="/schema/enum/share-meeting-type">
    Share types supported by this mutation
  </Card>
</CardGroup>


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