Create M2M Client - Stytch Docs

Documentation Index

Fetch the complete documentation index at: /docs/llms.txt

Use this file to discover all available pages before exploring further.

Code Examples

C#

// POST /v1/m2m/clients
const stytch = require('stytch');

const client = new stytch.B2BClient({
  project_id: '${projectId}',
  secret: '${secret}',
});

const params = {
  scopes: ["read:users", "write:users"],
  client_name: "My Sample Client",
  client_description: "My sample client for testing out M2M authentication.",
};

client.M2M.Clients.Create(params)
  .then(resp => { console.log(resp) })
  .catch(err => { console.log(err) });

Go

// POST /v1/m2m/clients
package main

import (
    "context"
    "log"

"github.com/stytchauth/stytch-go/v18/stytch/b2b/b2bstytchapi"
    "github.com/stytchauth/stytch-go/v18/stytch/consumer/m2m/clients"
)

func main() {
    client, err := b2bstytchapi.NewClient(
        "${projectId}",
        "${secret}",
    )
    if err != nil {
        log.Fatalf("error instantiating client: %v", err)
    }

params := &clients.CreateParams{
        Scopes:            []string{"read:users", "write:users"},
        ClientName:        "My Sample Client",
        ClientDescription: "My sample client for testing out M2M authentication.",
    }

resp, err := client.M2M.Clients.Create(context.Background(), params)
    if err != nil {
        log.Fatalf("error in method call: %v", err)
    }

log.Println(resp)
}

Java

// POST /v1/m2m/clients
package com.example;

import com.stytch.java.b2b.StytchB2BClient;
import com.stytch.java.common.StytchResult;
import com.stytch.java.consumer.models.m2mclients.CreateRequest;

public class Main {
    public static void main(String[] args) {
        StytchB2BClient.configure("${projectId}", "${secret}");

CreateRequest params = new CreateRequest();
        params.setScopes(new String("read:users", "write:users"));
        params.setClientName("My Sample Client");
        params.setClientDescription("My sample client for testing out M2M authentication.");

Object result = StytchB2BClient.getM2M().getClients().create(params);
        if (result instanceof StytchResult.Success) {
          System.out.println(((StytchResult.Success) result).getValue());
        } else {
          System.out.println(((StytchResult.Error) result).getException());
        }
    }
}

Python

# POST /v1/m2m/clients
from stytch import B2BClient

client = B2BClient(
    project_id="${projectId}",
    secret="${secret}",
)

resp = client.m2m.clients.create(
    scopes=["read:users", "write:users"],
    client_name="My Sample Client",
    client_description="My sample client for testing out M2M authentication.",
)

print(resp)

API Error Responses

{
  "status_code": 401,
  "request_id": "request-id-test-b05c992f-ebdc-489d-a754-c7e70ba13141",
  "error_type": "unauthorized_credentials",
  "error_message": "Unauthorized credentials.",
  "error_url": "https://stytch.com/docs/api/errors/401"
}
{
  "status_code": 429,
  "request_id": "request-id-test-b05c992f-ebdc-489d-a754-c7e70ba13141",
  "error_type": "too_many_requests",
  "error_message": "Too many requests have been made.",
  "error_url": "https://stytch.com/docs/api/errors/429"
}
{
  "status_code": 500,
  "request_id": "request-id-test-b05c992f-ebdc-489d-a754-c7e70ba13141",
  "error_type": "internal_server_error",
  "error_message": "Oops, something seems to have gone wrong, please reach out to support@stytch.com to let us know what went wrong.",
  "error_url": "https://stytch.com/docs/api/errors/500"
}

Additional Notes

On initial client creation, you may pass in a custom client_id or client_secret to import an existing M2M client. If you do not pass in a custom client_id or client_secret, one will be generated automatically. The client_id must be unique among all clients in your project.

The API response is the only time you will be able to view the generated client_secret. Stytch stores a hash of the client_secret and cannot recover the value if lost. Be sure to persist the client_secret in a secure location. If the client_secret is lost, you will need to trigger a secret rotation flow to receive another one.