Ports

The sixteen interfaces the core calls on a connector — which are required, which a capability binds, which are optional, the value objects that cross them, and the rules every implementation shares.

A port is an interface under Subscriby\Connector\Contracts\Ports. The core reaches a connector only through ports, and every method takes and returns SDK value objects from Subscriby\Connector\Data: an InstallationRef and the installation's CredentialBag say which installation acts and with what, a SpaceRef names a gated place, an IdentityRef a person's account, a GrantRef an access record. Eloquent models never cross in either direction.

The Connector class binds each port by its interface name through the ConnectorRegistrar; the registry checks the bindings against the manifest's capabilities at boot.

The sixteen ports

PortBoundIn one sentence
InstallationLifecyclealwaysConnecting, verifying, describing and disconnecting an installation on the platform.
IdentityResolveralwaysWho an inbound event is from, and what the platform knows about an account.
InboundGatewayalwaysTurning what the platform sends into authenticated, deduplicated events.
FailureClassifieralwaysReading why the platform refused a call, in the core's seven kinds.
TextRendereralwaysTurning the canonical HTML into what the platform accepts.
SettingsSchemaalways (usually from the manifest)The install and settings forms as data.
UiSlotsalwaysThe connector's contributions to the core's UI slots, even when there are none.
Messengermessaging, broadcastsSending, editing and deleting the core's messages, and sending files.
AccessControlleraccess_control, early_admission_holdGranting, revoking, admitting, announcing and reconciling access to places.
SupportRelaysupport_relayCarrying a support conversation to the creator on the platform and back.
PortalLoginMethodportal_loginSigning a member into the portal through the platform.
RegistersCreatorscreator_registrationWhere a creator account can be started from inside the platform.
ManagementSurfacemanagement_surfaceThe creator's in-chat admin surface over the core's command catalogue.
ProvidesPaymentMethodsnative_payments (official only)Payment methods that exist only because of the platform.
RecoverySupportany recovery_*What the Disaster Recovery Program needs a connector to witness and do.
SpaceCatalogoptional, no capabilityHow a creator picks a place to gate, and whether the installation controls it.

Rules every port shares

  • Refs in, results out. A port never receives a model, a request from the dashboard or a database row; it receives refs (InstallationRef, IdentityRef, SpaceRef, GrantRef, ProjectRef, CreatorRef, MemberRef) that carry the ids and external ids it needs, and returns result objects (GrantResult, DeliveryResult, InstallationHealth, …) rather than throwing on a platform refusal.
  • Credentials arrive per call. The CredentialBag is decrypted for the duration of one call and handed in beside the InstallationRef. A port never stores it, logs it or reads the core's table.
  • Refusals are classified, not thrown. Every send, grant and probe reports a DeliveryFailure (kind, detail, retry-after, platform code) built by your FailureClassifier; the core decides from the kind whether to retry, wait, alert the creator or give up. An exception is for a programming error, not for a platform that said no.
  • Idempotent by design. The core retries. grant() called twice yields one grant, revoke() of what the platform already lost reports revoked, record() on the Core API rewrites rather than duplicates, and a replayed inbound event is dropped by the core before it reaches you, but your own side effects must tolerate a second call all the same.
  • Unsupported facets throw once. A method the manifest denies (a recovery facet, early admission on a kind that has none) throws Subscriby\Connector\Exceptions\UnsupportedByConnector. The core never calls a denied facet; the throw is there for the day it is called by mistake.
  • Nothing from the application's namespace. A port reads the core through Subscriby\Connector\Core\* (Core API) and its own repositories, never through App\*. Subscriby's suite fails a package that does.

Value objects you will meet on every page

ObjectCarries
InstallationRefid, connector, scope (platform or project), projectId, externalId (the bot or app id), storageRef (your own row), handle.
CredentialBagget(key), has(key), toArray(): the secrets the install form's secret fields and your complete() stored.
IdentityRefid, connector, externalId, storageRef.
SpaceRefid, connector, externalId, kind, storageRef, parentExternalId (a role's guild, a topic's group).
GrantRefid, mode (GrantMode), reference (what you issued).
DeliveryFailurekind (DeliveryFailureKind), detail, retryAfterSeconds, code.
DeliveryResultdelivered, externalMessageId, failure.

Where each port is called from

Every page below says which core surface drives the port today: a dashboard action, a scheduled job, a REST endpoint, the conformance kit. A method the core does not yet call is marked as such, so you know what the kit exercises and what only a future core release will.

How is this guide?

On this page

Subscriby is a product designed by you — for you.

No boardroom full of executives deciding what we ships next. Our roadmap always shaped by you with your feedback.

Share feedback or a request