The main difference is semantical. A page is something that stands by itself, while a post type in a categorization of content. This semantical difference results in different admin flow for both.
The only other difference is that pages can have flexible URLs and you can basically put a page anywhere.
As far as core API goes, you can do everything in any of them.
So to answer your question directly, when to use one over the other depends on how you think the admin will use it. For example for most sites there is only one contact page, using a CPT for that will just clutter the admin UI. OTOH plugins that enable you to create many forms will use a CPT as it is results in a more organized admin for them
Related Posts:
- Make parts of your wordpress website completely built with data from external APIs?
- Database to page routing API?
- Hook for post and page load
- Integrating a custom post type into a page hierarchy
- Custom Post Type Slug / Page Slug Conflict – Prevent use of reserved slug on page save?
- Searching multiple custom post types and pages
- Fetch All Posts (Including Those Using a Custom Post Type) With WordPress API
- Return current page type
- get post type plural
- Custom Post Type as Page parent
- How to add a post from a custom post type as the static page?
- Get page by template?
- Page as child in custom post type slug?
- REST API: How can I restrict a custom post type to only be accessible by authenticated users?
- Is it proper to create a page just to generate a listing page (eg. for a custom post type)
- TV Show database – Best way for structuring it?
- Is there a way to make a custom Page type?
- Menu position (admin menu) of pages
- How to Add Pages Under Custom Post Type URL Structure?
- Custom Posts on Different Pages
- Pagination with custom loop
- Include images from pages in wp search.php results in default wp search
- Priority for Categories, Tags, Taxonomies, Posts, Pages and Custom Posts with same url
- How to create user personal pages with information from their meta profile fields?
- How to create download links based on Custom Fields with Rewrite API
- Exclude Custom Post Type & Pages From Auto-Tag Function
- Display “Post 2 of 4” on single post page?
- Custom post metadata not appearing in public API
- Custom Post Type Name Causing Problem
- Make custom post type display as a page
- wp_list_pages doesn’t work in hierarchical custom post type
- Multiple portfolios with one custom post type?
- Is it possible to use pages to apply static content to each taxonomy level?
- Making pages also serve as taxonomies? Or give full pages to taxonomies?
- Share parent path between Custom Post Types and Pages?
- ‘Pages’ widget alternative for custom post types?
- Custom Blog Post Listing in Genesis Sample Child Theme
- Check if admin is editing page or custom post type
- remove child post from custom post type archive
- Pull in custom content types into page template
- custom posts on different page
- Trying to edit the single page from a Custom Post
- How would you associate location data with a post?
- Custom Post-to-Post with multiple parents?
- How do I fix permalinks for custom post types that has the same slug as a page?
- Create custom PAGE with register_post_type
- Should I use custom taxonomy or custom post type
- Disable featured image
- How do I get the intended post type of a revision post?
- Making a custom help center page
- How i can add ‘N’ page of ‘N’ pages under posts loop?
- create a template page for a post
- Page vs Custom Post Types Differences/Issues
- Allow non-logged in users to see a future post after clicking on a list of future posts
- Exclude pages in archives results
- Trouble with CPT Child 404
- Assign same parrent Page to pages AND custom post types
- Allow Static Page Load Dynamic Child Pages
- Exclude objects from WordPress API based from ACF field using rest_prepare_{$post_type}
- No Permission to add new Page, Post or CPT with Admin role
- Static page determines as home, but it is not
- Show Custom Post Type meta boxes only on Page Edit
- Why does my content disapear when I make a page to match an archive name?
- How to use Custom Page Templates for hierarchical Custom Post Type
- Top Level pages in wordpress giving 404, but child pages working fine
- Page for custom post type
- Why does not this wp_redirect work in is_single()?
- Why is get_pages() returning a boolean?
- How to include custom post type posts on a page?
- Including link to custom post type in ‘wp_list_pages’ function
- Creating tags via API
- the_content(); of custom post type treated as an array or object
- CRUD operations in wordpress
- Multiple pages per post (not pagination)
- Can I change my post type to anything and my site still work?
- Page listing Custom Posts
- Display an authors post on a single page only when they are logged in
- Why are some of my custom posts not showing up on my page?
- Merge page with custom post type
- Conflict between wp_list_pages and get_posts – list pages not displaying
- Hide Status Option From WordPress Publish Metabox and Rename Published on:
- Api rest_route 404 while building filter for custom posts (filtered by multiple meta keys / custom fields)
- WordPress custom API endpoint – how to make the request more flexible
- Custom REST endpoint not working to retrieve single posts (“rest_no_route”)
- WordPress as a backend for external service? [closed]
- URL Rewrite – Page Archive
- How to set the mainpage of a custom post type?
- Render a Post or Page using the correct file
- Custom permalink structure for remote content pages
- Setting a homepage – doesn’t seem to work
- Under What Conditions Can I name my CPT the same as my CPT Page?
- custom post creation on front page – on submit a search is done
- wp_dropdown_pages with tax_query clause
- Am I mixing up the concept of posts pages and categories?
- How to setup different permlalinks for posts and pages?
- Getting subpage of subpage – Custom posts
- Sets post_parent in custom post type posts automatically based on cpt->page name
- Tag template not returning posts [closed]
- Does “Custom Post Type” can have page hierarhy option?
- Use Gravity Forms and a Shopping Cart for output to Freshbooks for an Estimate [closed]