Sign in as client member

Sign in with client_member credentials to obtain a Bearer token.

POST/ops/v1/auth/signin#

Request Body

client_member_emailStringrequired
Client member email address
client_member_passwordStringrequired
Client member password

Response Fields

access_tokenStringrequired
Bearer access token. Use it as-is in the form `Authorization: Bearer {access_token}` when calling protected endpoints.
refresh_tokenStringrequired
Refresh token. Used to renew an expired access token.

Only client_member credentials are accepted. Internal staff/superadmin credentials are rejected. Key errors: 400 NotExistMember (email not registered), 400 MismatchedPassword (password mismatch), 400 NotActivatedClientMember (inactive member or inactive client).

curl -X POST "https://opsapi.edutap.ai/ops/v1/auth/signin" \
  -H "Content-Type: application/json" \
  -d '{
    "client_member_email": "partner-admin@example.com",
    "client_member_password": "S3cure!Pass"
  }'
import requests

res = requests.post(
    "https://opsapi.edutap.ai/ops/v1/auth/signin",
    json={
        "client_member_email": "partner-admin@example.com",
        "client_member_password": "S3cure!Pass"
    },
)
print(res.json())
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
)

func main() {
	body := []byte(`{
	  "client_member_email": "partner-admin@example.com",
	  "client_member_password": "S3cure!Pass"
	}`)
	req, _ := http.NewRequest("POST", "https://opsapi.edutap.ai/ops/v1/auth/signin", bytes.NewBuffer(body))
	req.Header.Set("Content-Type", "application/json")
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	b, _ := io.ReadAll(res.Body)
	fmt.Println(string(b))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
  public static void main(String[] args) throws Exception {
    String body = """
        {
          "client_member_email": "partner-admin@example.com",
          "client_member_password": "S3cure!Pass"
        }
        """;
    HttpRequest req = HttpRequest.newBuilder()
        .uri(URI.create("https://opsapi.edutap.ai/ops/v1/auth/signin"))
        .header("Content-Type", "application/json")
        .POST(HttpRequest.BodyPublishers.ofString(body))
        .build();
    HttpResponse<String> res = HttpClient.newHttpClient().send(req, HttpResponse.BodyHandlers.ofString());
    System.out.println(res.body());
  }
}
const res = await fetch("https://opsapi.edutap.ai/ops/v1/auth/signin", {
  method: "POST",
  headers: {"Content-Type": "application/json"},
  body: JSON.stringify({
    "client_member_email": "partner-admin@example.com",
    "client_member_password": "S3cure!Pass"
  }),
});
console.log(await res.json());
Response
{
  "access_token": "eyJhbGciOi...payload...",
  "refresh_token": "eyJhbGciOi...refresh-payload..."
}