During development they use moc's for the payloads that we're not ready to give them. When we build things FOR them all members are happy.
A good rule is to have the teams come to an agreement on the data that they need to show the user. Then have the BE team build out a rough payload.
Paired programming on features is always good.
Myself personally. I have a simple thing to keep in mind. FE keeps the customer happy, I keep FE happy, ops keeps us all happy. As long as BE remember they are there for the FE, everything flows smooth.
We use FETCH/HTTP and STOMP/WS to move the data, the main issue has always been spotty communication inside the team. A while ago, the situation was even worse, so some progress did happen. OpenAPI annotations to generate Swagger docs helped a bit, but I rarely bother to open these. Drafting endpoint signatures in TypeScript as a part of our workflow yielded great results, something concrete to talk about when things don't work as expected or during code reviews. Unfortunately, the agreements are as good as initial requirements, if the team does not understand or communicate these clearly, misunderstands are bound to happen. The other pain point is that OpenAPI only supports HTTP (https://github.com/OAI/OpenAPI-Specification/issues/55), there's no documentation for STOMP endpoints and custom RPC run over it. Another thing is when signatures change unexpectedly (I know, this should never happen; at least integration tests help here) in subtle ways and the UI suddenly starts misbehaving; types shared between frontend (TypeScript) and backend (Java) can partially alleviate the issue, but none of available tools provide what I'd really like to use, the results are either not expressive enough (no ADTs, unlike types authored by hand) or really hard to reconcile with existing code base.
The frontend team will be using the APIs provided by the backend. It should at least be fully documented to avoid unnecessary back and forth.
Regular "get together" meetings (remote or not, not necessarily with everyone) can help exchange pain points and prioritize issues. But not too often to impact productivity.
Basically, the backend team should know what the frontend team needs to consume. And the frontend team should know what the backend's technical limitations are. Trust in each-others expertise is also important IMHO.