Skip to content

gRPC vs REST

The PartnerAPI supports connecting via gRPC by default; this allows partners to auto-generate an SDK in their language of choice, and to connect normally via a Connect RPC HTTPS proxy. However, we can open a REST API connection for partners upon request.

Generating the Connect RPC Client

If you would like to connect to the gRPC endpoints using an HTTPS proxy, a Connect RPC client can be generated as follows:

  1. Install dependencies:

    brew install node grpcurl bufbuild/buf/buf
    npm install @bufbuild/protoc-gen-es @bufbuild/protobuf @connectrpc/connect @connectrpc/connect-node
  2. Use grpcurl to generate .proto files:

    grpcurl \
        -proto-out-dir basic-capital-protos/ \
        partnerapi.basiccapital.dev:443 \
        list
  3. Create a buf configuration file:

    version: v2
    inputs:
    - directory: basic-capital-protos/
    plugins:
    - local: protoc-gen-es
      opt: target=ts
      out: basic-capital-protos
  4. npx buf generate (this generates _pb.ts files alongside the .proto files in basic-capital-protos/)

  5. Verify it works with a simple client:

    import { createClient } from "@connectrpc/connect";
    import { createConnectTransport, createGrpcTransport } from "@connectrpc/connect-node";
    import { PartnerAuthIngressService } from "./basic-capital-protos/com/basiccapital/systems/ingress/partner/partner_auth_ingress_service_pb";
    import { EmployerCompanyIngressService } from "./basic-capital-protos/com/basiccapital/systems/ingress/employer/company_ingress_service_pb";
    import { EmployerPlanConfigIngressService } from "./basic-capital-protos/com/basiccapital/systems/ingress/employer/plan_config_ingress_service_pb";
    
    function makeTransport(interceptors?: Parameters<typeof createGrpcTransport>[0]["interceptors"]) {
      return createConnectTransport({
        baseUrl: "https://api.basiccapital.dev/v1/partner-rpc/",
        interceptors,
      });
    }
    
    const transport = makeTransport();
    
    const authClient = createClient(PartnerAuthIngressService, transport);
    
    const response = await authClient.exchangeApiKey({
      apiKey: "PARTNER_API_KEY",
    });
    
    const authToken = response.authToken;
    console.log("Fetched auth token");

REST APIs

Authorization and payroll endpoints are already available via REST. Full documentation for the REST API is coming soon.