{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"PartnerSharedIngressService"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"partnersharedingressservice","__idx":0},"children":["PartnerSharedIngressService"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Partners can authorize as either identity type."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"Authorization: Bearer <token>\nx-identity-uuid: <uuid>\nx-identity-type: COMPANY | EMPLOYEE\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"listagreements","__idx":1},"children":["ListAgreements"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Returns a status for overall agreements, and a list of agreements to sign. Agreements may take up to 30 seconds to generate. This will be kicked off asynchronously as soon as upstream dependencies are complete, and documents may be available by the time this endpoint is called; however, we recommend that partners check the status on the returned object to ensure that agreements are ready."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"protobuf","header":{"controls":{"copy":{}}},"source":"service PartnerSharedIngressService {\n  rpc ListAgreements(ListAgreementsRequest) returns (ListAgreementsResponse);\n}\n\nmessage ListAgreementsRequest {\n  repeated Agreement.Status statuses = 1;\n  repeated Agreement.Type types = 2;\n}\n\nmessage ListAgreementsResponse {\n  repeated Agreement agreements = 1;\n}\n","lang":"protobuf"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Data types:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/core-data-types/identity-and-agreements#agreement"},"children":["Agreement"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"markagreementssigned","__idx":2},"children":["MarkAgreementsSigned"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Marks any agreement in the list signed with the provided consent information."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"protobuf","header":{"controls":{"copy":{}}},"source":"service PartnerSharedIngressService {\n  rpc MarkAgreementsSigned(MarkAgreementsSignedRequest) returns (MarkAgreementsSignedResponse);\n}\n\nmessage MarkAgreementsSignedRequest {\n  message SignedAgreements {\n    string agreement_uuid = 1;\n    ConsentInfo consent_info = 2;\n  }\n\n  repeated SignedAgreements agreements = 1;\n}\n\nmessage MarkAgreementsSignedResponse {}\n","lang":"protobuf"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Data types:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/core-data-types/identity-and-agreements#consentinfo"},"children":["ConsentInfo"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"getorcreateuser","__idx":3},"children":["GetOrCreateUser"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Partners should call this endpoint to create a user in Basic Capital and fetch an invite token for SSO. Authorize as either the company or the employee, depending on whether they want to log into the employer dashboard or member app."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Note that if a single user has an admin and employee account, they will receive ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["separate invite tokens"]}," for each entity type; however, when they accept the invite via SSO, their user in Basic Capital will have access to both accounts. This flow will be invisible to the user, but is an important distinction for partners if they plan to cache the user status. We recommend simply calling ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GetOrCreateUser"]}," each time to avoid confusion."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"protobuf","header":{"controls":{"copy":{}}},"source":"service PartnerSharedIngressService {\n  rpc GetOrCreateUser(GetOrCreateUserRequest) returns (GetOrCreateUserResponse);\n}\n\nmessage GetOrCreateUserRequest {\n  UserInviteInfo invite_info = 1;\n}\n\nmessage GetOrCreateUserResponse {\n  BasicCapitalUserStatus user_status = 1;\n  optional string accept_invite_token = 2;\n}\n","lang":"protobuf"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Data types:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/core-data-types/identity-and-agreements#basiccapitaluserstatus"},"children":["BasicCapitalUserStatus"]},", ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/core-data-types/identity-and-agreements#userinviteinfo"},"children":["UserInviteInfo"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"beginidentityverification","__idx":4},"children":["BeginIdentityVerification"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Opens a verification session. The returned ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["verification_uuid"]}," identifies the session; ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["auth_token"]}," is the provider session token to hand to the provider's client SDK, where the provider requires one."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Employees and trustees must pass identity verification as a first step before any interactions with the platform. Verification runs in two calls: begin opens a session with the verification provider, then complete it with the token that provider returns to your client."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the person already has a Basic Capital account under the same SSN, verification cannot complete. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PartnerEmployeeIngressService.GetEmployeeOnboardingStatus"]}," will return a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["kyc_status"]}," of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MUST_LINK_ACCOUNT"]},", and the employee must link their existing account before continuing. See the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/integration-guide/single-sign-on"},"children":["Single sign-on guide"]}," for more information."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["By default, Basic Capital uses ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://onefootprint.com/"},"children":["Footprint"]}," as an IdV provider, which partners can embed in their onboarding experience; however, if partners run KYC and are able to provide the required data fields, we can work to integrate with you as a provider."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"protobuf","header":{"controls":{"copy":{}}},"source":"service PartnerSharedIngressService {\n  rpc BeginIdentityVerification(BeginIdentityVerificationRequest) returns (BeginIdentityVerificationResponse);\n}\n\nmessage BeginIdentityVerificationRequest {\n  VerificationProvider verification_provider = 1;\n  VerificationType verification_type = 2;\n}\n\nmessage BeginIdentityVerificationResponse {\n  string verification_uuid = 1;\n  optional string auth_token = 2;\n}\n","lang":"protobuf"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Data types:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/core-data-types/identity-and-agreements#verificationprovider"},"children":["VerificationProvider"]},", ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/core-data-types/identity-and-agreements#verificationtype"},"children":["VerificationType"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"completeidentityverification","__idx":5},"children":["CompleteIdentityVerification"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Completes the session opened above, using the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["verification_uuid"]}," returned by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BeginIdentityVerification"]}," and the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["verification_token"]}," your client receives from the provider on success."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VERIFICATION_STATUS_PENDING"]}," result means the provider has not returned a decision yet; poll ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GetEmployeeOnboardingStatus"]}," for the resulting ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["kyc_status"]}," rather than re-running verification."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"protobuf","header":{"controls":{"copy":{}}},"source":"service PartnerSharedIngressService {\n  rpc CompleteIdentityVerification(CompleteIdentityVerificationRequest) returns (CompleteIdentityVerificationResponse);\n}\n\nmessage CompleteIdentityVerificationRequest {\n  string verification_uuid = 1;\n  string verification_token = 2;\n}\n\nmessage CompleteIdentityVerificationResponse {\n  VerificationStatus verification_status = 2;\n}\n","lang":"protobuf"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Data types:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/core-data-types/identity-and-agreements#verificationstatus"},"children":["VerificationStatus"]}]}]},"headings":[{"value":"PartnerSharedIngressService","id":"partnersharedingressservice","depth":1},{"value":"ListAgreements","id":"listagreements","depth":2},{"value":"MarkAgreementsSigned","id":"markagreementssigned","depth":2},{"value":"GetOrCreateUser","id":"getorcreateuser","depth":2},{"value":"BeginIdentityVerification","id":"beginidentityverification","depth":2},{"value":"CompleteIdentityVerification","id":"completeidentityverification","depth":2}],"frontmatter":{"title":"PartnerSharedIngress","seo":{"title":"PartnerSharedIngressService"}},"lastModified":"2026-09-18T14:49:13.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/grpc/partnersharedingressservice","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}