sendly-now Members API

A project's members and their roles. A project is the team: a member is added by the email of an existing Sendly account and joins at once, so there are no pending invitations. For a session or an agent acting for a project admin, never an API key.

Operations 4

GET /api/projects/{id}/members List the project's members #
POST /api/projects/{id}/members Add a member by email #
DELETE /api/projects/{id}/members/{userId} Remove a member #
PATCH /api/projects/{id}/members/{userId} Change a member's role #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/sendly-now:sendly-now-members-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

sendly-now-members-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Sendly Now Members API
  version: 1.0.0
  contact:
    name: Sendly Support
    url: https://sendly.now
  license:
    name: AGPL-3.0
    url: https://www.gnu.org/licenses/agpl-3.0.txt
  description: 'Operations tagged Members across 2 of this provider''s published API definitions: openapi.json, sendly-now-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.sendly.now
tags:
- description: 'A project''s members and their roles. A project is the team: a member is added by the email of an existing Sendly account and joins at once, so there are no pending invitations. For a session or an agent acting for a project admin, never an API key.'
  name: Members
paths:
  /api/projects/{id}/members:
    get:
      description: Requires the `members:read` scope — See who belongs to your projects.
      operationId: listMembers
      parameters:
      - description: Project id.
        in: path
        name: id
        required: true
        schema:
          description: Project id.
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectMemberList'
          description: OK
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Validation error
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Unauthorized — missing or invalid auth
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Forbidden — insufficient permissions or project disabled
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Resource not found
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Rate limit or billing limit exceeded
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Internal server error
      security:
      - SessionAuth: []
      - OAuth2:
        - members:read
      summary: List the project's members
      tags:
      - Members
    post:
      description: 'Adds the person whose Sendly account uses this email, at once. An email with no account answers 404 `NOT_FOUND`: the person signs up first. Only a project admin or owner may add members.


        Requires the `members:write` scope — Add and remove project members and change their roles.'
      operationId: inviteMember
      parameters:
      - description: Project id.
        in: path
        name: id
        required: true
        schema:
          description: Project id.
          type: string
      requestBody:
        content:
          application/json:
            schema:
              properties:
                email:
                  format: email
                  type: string
                role:
                  default: MEMBER
                  enum:
                  - ADMIN
                  - MEMBER
                  type: string
              required:
              - email
              type: object
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectMember'
          description: OK
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Validation error
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Unauthorized — missing or invalid auth
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Forbidden — insufficient permissions or project disabled
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Resource not found
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Rate limit or billing limit exceeded
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Internal server error
      security:
      - SessionAuth: []
      - OAuth2:
        - members:write
      summary: Add a member by email
      tags:
      - Members
    servers:
    - url: https://api.sendly.now
  /api/projects/{id}/members/{userId}:
    delete:
      description: 'The member loses access at once. Nobody may remove themselves; an agent''s `remove_member` asks for a confirm token first.


        Requires the `members:write` scope — Add and remove project members and change their roles.'
      operationId: removeMember
      parameters:
      - description: Project id.
        in: path
        name: id
        required: true
        schema:
          description: Project id.
          type: string
      - description: The member's user id, from `listMembers`.
        in: path
        name: userId
        required: true
        schema:
          description: The member's user id, from `listMembers`.
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectMemberRemoved'
          description: OK
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Validation error
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Unauthorized — missing or invalid auth
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Forbidden — insufficient permissions or project disabled
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Resource not found
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Rate limit or billing limit exceeded
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Internal server error
      security:
      - SessionAuth: []
      - OAuth2:
        - members:write
      summary: Remove a member
      tags:
      - Members
    patch:
      description: Requires the `members:write` scope — Add and remove project members and change their roles.
      operationId: updateMemberRole
      parameters:
      - description: Project id.
        in: path
        name: id
        required: true
        schema:
          description: Project id.
          type: string
      - description: The member's user id, from `listMembers`.
        in: path
        name: userId
        required: true
        schema:
          description: The member's user id, from `listMembers`.
          type: string
      requestBody:
        content:
          application/json:
            schema:
              properties:
                role:
                  enum:
                  - ADMIN
                  - MEMBER
                  type: string
              required:
              - role
              type: object
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectMember'
          description: OK
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Validation error
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Unauthorized — missing or invalid auth
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Forbidden — insufficient permissions or project disabled
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Resource not found
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Rate limit or billing limit exceeded
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
          description: Internal server error
      security:
      - SessionAuth: []
      - OAuth2:
        - members:write
      summary: Change a member's role
      tags:
      - Members
    servers:
    - url: https://api.sendly.now
components:
  schemas:
    Error:
      description: 'Standard error envelope returned by all 4xx/5xx responses. Migrated routes include `success: false`; 422 validation errors add `error.details.errors`.'
      properties:
        error:
          properties:
            code:
              type: string
            details:
              properties:
                errors:
                  items: {}
                  type: array
              required:
              - errors
              type: object
            message:
              type: string
          required:
          - message
          - code
          type: object
        success:
          enum:
          - false
          type: boolean
      required:
      - error
      type: object
    ProjectMemberRemoved:
      properties:
        data:
          properties:
            message:
              type: string
          required:
          - message
          type: object
        success:
          enum:
          - true
          type: boolean
      required:
      - success
      - data
      type: object
    ProjectMemberList:
      properties:
        data:
          items:
            properties:
              createdAt:
                format: date-time
                type: string
              email:
                type: string
              role:
                enum:
                - OWNER
                - ADMIN
                - MEMBER
                type: string
              userId:
                type: string
            required:
            - userId
            - email
            - role
            - createdAt
            type: object
          type: array
        success:
          enum:
          - true
          type: boolean
      required:
      - success
      - data
      type: object
    ProjectMember:
      properties:
        data:
          properties:
            email:
              type: string
            role:
              enum:
              - OWNER
              - ADMIN
              - MEMBER
              type: string
            userId:
              type: string
          required:
          - userId
          - email
          - role
          type: object
        success:
          enum:
          - true
          type: boolean
      required:
      - success
      - data
      type: object
  securitySchemes:
    ApiKeyAuth:
      bearerFormat: API Key
      description: 'API key authentication. Use a `sk_*` (FULL) or `pk_*` (SENDING_ONLY) key as the bearer token. Public keys (`pk_*`) are restricted to the email-send endpoints and the self-serve list subscribe/unsubscribe pair; every other endpoint — event tracking included — answers 403 for them. In scope terms (used by `/api/v1/*` operations): FULL keys hold every scope; SENDING_ONLY keys hold only `emails:send`.'
      scheme: bearer
      type: http
    MailgunBasicAuth:
      description: 'Mailgun-style authentication for the `/api/compat/mailgun/*` operations only: HTTP Basic with the username `api` and a Sendly API key (`sk_*`, or a `pk_*` send-only key) as the password, exactly as mailgun.js sends it.'
      scheme: basic
      type: http
    OAuth2:
      description: 'OAuth 2.1 with PKCE, for AI agents and other delegated clients (this is what the MCP endpoint at `/api/mcp` uses, and how a third-party application sends on a user''s behalf). Tokens are minted through the consent screen and carry ONLY the scopes the user ticked there, so an operation lists the single scope it requires and a token without it answers `403` with code `SCOPE_MISSING` — before any input is parsed. Unlike an API key, a delegated token reaches an operation only where the route itself declares a scope; every other route refuses it outright.


        **Ask for the right audience.** Pass `resource=https://app.sendly.now/api` on the authorization AND the token request to receive a token for this REST API; `resource=https://app.sendly.now/api/mcp` is the MCP endpoint''s identifier. A request carrying no `resource` receives an OPAQUE token, which every endpoint here rejects. Each identifier publishes RFC 9728 metadata at `/.well-known/oauth-protected-resource/api` and `/.well-known/oauth-protected-resource/api/mcp`.


        **Name the project on every call.** An OAuth grant belongs to a USER, not to a project — the same person may belong to several — so a delegated token carries no tenant and the project is chosen per request with the `x-project-id` header, checked against real membership. Omit it and a project-scoped operation answers `400`; send one the user does not belong to and it answers `403 PROJECT_ACCESS_DENIED`. List the projects a token may name with `GET /api/users/me/projects` (scope `projects:read`), which needs no header. API keys are unaffected: a key already names its project.'
      flows:
        authorizationCode:
          authorizationUrl: https://app.sendly.now/api/auth/oauth2/authorize
          refreshUrl: https://app.sendly.now/api/auth/oauth2/token
          scopes:
            account:read: See your profile and notification preferences
            account:write: Edit your profile and preferences, export your data, delete your account
            analytics:read: View your sending analytics and engagement metrics
            api-keys:read: See which API keys exist, including what each one is allowed to do
            api-keys:write: Create, rotate, and revoke API keys — these keep working even after you disconnect this app
            billing:read: See your plan, usage, invoices and spending limits
            billing:write: Start a checkout, change spending limits, open the billing portal, cancel or refund
            campaigns:read: View your campaigns and their performance
            campaigns:send: Send or schedule your campaigns to their audience
            campaigns:write: Create, edit, and organize your campaigns
            connections:read: See connected services such as Slack and connected AI apps
            connections:write: Connect, re-verify and disconnect services
            contacts:read: View your contacts and their custom fields
            contacts:write: Create, update, and delete your contacts
            deliverability:read: Check why mail from one of your domains is not arriving
            domains:read: View your sending domains and their verification status
            domains:write: Add and remove sending domains, and trigger verification
            emails:read: View the emails you have sent and their delivery status
            emails:send: Send emails from your verified domains
            emails:test: Send test emails to your own address from the Sendly sandbox
            events:read: View the custom events your application has recorded
            events:write: Record custom events for your contacts
            lists:read: View your subscriber lists and who is on them
            lists:write: Create, rename, and delete your subscriber lists
            mailbox-conversations:read: Read the conversations in your hosted mailboxes — every message and attachment people have sent you
            mailbox-conversations:reply: Reply to conversations in your hosted mailboxes, from the mailbox's own address
            mailboxes:read: View the mailboxes on your domains and their settings
            mailboxes:send: Write and send new email from your hosted mailboxes, as that address
            mailboxes:write: Create and delete mailboxes on your verified domains
            members:read: See who belongs to your projects
            members:write: Add and remove project members and change their roles
            projects:read: View your projects and their settings
            projects:write: Create, change, reset and delete projects on your account
            segments:read: View your segments and who belongs to them
            segments:write: Create, edit, and delete your segments
            support:read: See your support tickets
            support:write: Open support tickets and suspension appeals
            suppression:read: View the addresses on your suppression list
            suppression:write: Add and remove addresses on your suppression list
            templates:read: View your email templates
            templates:write: Create, edit, and delete your email templates
            topics:read: View the topics you mail about and who is subscribed to each
            topics:write: Create and edit topics, and change what your contacts are subscribed to — this decides who your campaigns reach
            usage:read: View your usage totals and billing limits
            validation:read: View your email validation runs and their results
            validation:write: Check whether email addresses can receive mail — this is billed per address
            webhooks:read: View your webhook endpoints and their delivery history
            webhooks:write: Create, edit, and delete your webhook endpoints
            workflows:read: View your automation workflows and their runs
            workflows:write: Create, edit, enable, and delete your automation workflows
          tokenUrl: https://app.sendly.now/api/auth/oauth2/token
      type: oauth2
    PostmarkServerToken:
      description: 'Postmark-style authentication for the `/api/compat/postmark/*` operations only: a Sendly API key (`sk_*`, or a `pk_*` send-only key) sent in the `X-Postmark-Server-Token` header, exactly where the postmark SDK puts its server token.'
      in: header
      name: X-Postmark-Server-Token
      type: apiKey
    SessionAuth:
      description: BetterAuth session cookie. Used by the dashboard / browser clients. When present, the active project is taken from the `x-project-id` header.
      in: cookie
      name: better-auth.session_token
      type: apiKey
x-refined-from:
- openapi.json
- sendly-now-openapi.json