# Print API

The Print API enables document printing through the device's native print dialog (such as AirPrint on iOS or the system print dialog on Android). This API is designed for printing documents to standard printers, and does not support direct printing to receipt printers.

## PrintApi

Interface for handling print operations

### PrintApiContent

Access the print API for printing functionality

### print

value: `(src: string) => Promise<void>`

Trigger a print dialog.

The src must be either:
- A relative path that will be appended to your app's [application_url](https://shopify.dev/docs/apps/build/cli-for-apps/app-configuration#application_url)
- A full URL to your app's backend that will be used to return the document to print

Supported document types:
- HTML documents (recommended for best printing experience)
- Text files
- Image files (PNG, JPEG, etc.)
- PDF files (Note: On Android devices, PDFs will be downloaded and must be printed using an external application)

## Related

- [PrintPreview Component](/api/pos-ui-extensions/components/printpreview)
- [Build a Print Extension](https://shopify.dev/docs/api/pos-ui-extensions/examples/print-extension)

## Examples

The Print API enables document printing through the device's native print dialog (such as AirPrint on iOS or the system print dialog on Android). This API is designed for printing documents to standard printers, and does not support direct printing to receipt printers.



```tsx
import React from 'react';
import {
  Tile,
  reactExtension,
  useApi,
} from '@shopify/ui-extensions-react/point-of-sale';

const TileComponent = () => {
  const api = useApi();
  return (
    <Tile
      title="My app"
      subtitle="Hello world!"
      onPress={() => {
        api.print.print('documents/test-print');
      }}
      enabled
    />
  );
};

export default reactExtension('pos.home.tile.render', () => {
  return <TileComponent />;
});

```

```ts
import {Tile, extension} from '@shopify/ui-extensions/point-of-sale';

export default extension('pos.home.tile.render', (root, api) => {
  const tile = root.createComponent(Tile, {
    title: 'My app',
    subtitle: 'Hello world!',
    enabled: true,
    onPress: () => {
      api.print.print('/documents/test-print');
    },
  });

  root.append(tile);
});

```



```tsx
// If your application_url is "https://my-app.com"
// This will resolve to "https://my-app.com/api/print/document"
await print.print('/api/print/document');

```



```tsx
// Using a full URL directly
await print.print('https://my-print-service.com/api/print/document');

```