Quickstart
You don't need a key. Lookups are public, and each formation or application has its own token. This page files a trademark. Form a company has the same steps for a company.
1. Check the name
Screen it for common refusal grounds:
curl -X POST https://api.joinopenfile.com/v1/marks/screen \
-H "content-type: application/json" \
-d '{"mark":"Quillbrook","description":"scented candles"}'Then search USPTO records:
curl -X POST https://api.joinopenfile.com/v1/marks/search \
-H "content-type: application/json" \
-d '{"mark":"Quillbrook","classes":[4]}'checked: true means the USPTO answered. If the search fails you get an error, not an empty list, so a failure can't pass for a clear result.
2. Pick a class
curl -X POST https://api.joinopenfile.com/v1/classes/suggest \
-H "content-type: application/json" \
-d '{"description":"Hand-poured scented candles sold online"}'3. Prepare the application
Send what the owner told you. Every field is optional, so you can build it up as they answer.
curl -X POST https://api.joinopenfile.com/v1/applications \
-H "content-type: application/json" \
-d '{"mark":"Quillbrook","classes":[{"number":4,"wording":"Candles; scented candles; candle wicks"}]}'The response has what you need next:
{
"id": "k7m2p9xw4q",
"object": "application",
"status": "draft",
"ready": false,
"issues": [
{ "field": "owner.type", "message": "Ask whether the owner is an individual, LLC, corporation or partnership." }
],
"review_url": "https://joinopenfile.com/trademark/start?draft=k7m2p9xw4q&k=...",
"token": "..."
}Keep token. Ask the owner what issues lists, and send their answers with update application.
4. Send the owner the link
Send them review_url. It opens the application on our site, where they check every answer and sign. Nothing reaches the attorney until they do.
5. Follow it
curl https://api.joinopenfile.com/v1/applications/$ID \
-H "Authorization: Bearer $TOKEN"Once they sign, status is signed and filing holds the filing's status, then its USPTO serial number once it's filed.